1. 下載一份代碼
git svn clone **** --username=***
2. 查看log
git log (git svn log -v 可以顯示每次修改提交的文件)
git log -p (可以查看每次提交log和對應的修改內容)
git log --stat (可以查看每次提交log和對應的修改文件)
3. 查看某人的log
git log --author=***
4. 撤銷工作區的修改
git checkout -- file
注:如果沒有--,表示切換到某個分支。
5. 撤銷暫存區的修改
git reset --hard HEAD file
6. 與遠端同步
git svn rebase
7. 將修改提交到svn
git svn dcommit
8. 查看狀態
git status
9. 顯示分支情況
git branch -a
10. 新建分支
git branch new-branch-name (git checkout -b new_branch(新建分支並跳轉到分支))
11. 刪除分支
git branch -d new_branch (刪除分支時,不可處於當前分支)
基本使用的流程
安裝
yun -y install git-svn
配置
安裝完畢后要做一些簡單的配置。最直接的做法就是創建修改~/.gitconfig。
[user]
name =
email =
[color]
diff = auto
status = auto
branch = auto
[alias]
st = status
rb = svn rebase
ci = commit -a
co = checkout
[core]
editor = /usr/bin/vim
[user]部分標示出使用者的身份,你提交的代碼會自動引用這一身份信息。
[color]設置命令輸出的顏色。
[alias]部分可以簡化一些常用命令,比如在這里將git status簡化為git st。
接下來,需要配置忽略文件,讓git忽略一些目錄中不希望加入代碼庫的文件,類似svn propset svn:ignore。全局有效的忽略文件列表可以添加在./.git/info/exclude文件中。比如需要忽略所有vi產生的swp文件:
.*.swp
對於和目錄有關的忽略文件設置可以在該目錄下創建.gitignore,然后加入需要忽略的內容,比如我希望忽略根目錄下的log,tmp等目錄,可以直接在根目錄下的.gitignore中加入:
log
tmp
使用git-svn
1. 下載svn工程
git svn clone svn-repository-url
這個命令時間比較長,因為需要同步所有的提交歷史,僅此一次,以后不會這么慢了。做完這一步,在本地就有了一個完整的代碼庫,包括所有commit的歷史和log,已經可以開始用它來進行開發工作了。
注:
不過,在開始開發之前,最好先做一次垃圾搜集:
git gc
它是對代碼庫的信息進行垃圾搜集和壓縮,最明顯的作用就是減小磁盤占用空間。第一次做效果尤其明顯。
2. 新建本地分支
用git后開始養成一個新習慣,就是工作前先創建新分支:
git checkout -b new_branch
-b后是分支名,創建的同時,你要轉到了新分支上。盡量保持master上沒有未提交到svn的commit,這樣隨時都可以很容易的產生一個干凈的分支。
(刪除分支git branch -d branch_name,且不可以在將要被刪除的分支下執行)
3. 查看修改
接下來你可以寫代碼,修改文件或者添加文件。如果想看看修改了什么,可以用:
git diff (顯示工作區與暫存區的修改)
如果對某個修改不滿意,希望恢復原狀,可以使用:
git checkout -- path/filename(該命令只會丟棄工作區的修改)
相當於svn revert
git diff --cached (顯示暫存區與版本庫的區別)
丟棄暫存區的修改
Git reset HEAD file
4. 提交到分支
git引入一個索引(index)的概念,提交前,需要把要提交的文件加入到git索引(index)中:
添加到暫存區
git add path/filename1
git add path/filename2
...
從緩沖區刪除
git reset HEAD readme.txt
git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。
然后提交
git commit -m "提交感言"
每次commit都是提交索引(index)中的內容。
如果要一次提交所有修改過的文件,可以一次性添加,然后提交
git add .
git checkout . 放棄所有的工作區修改
git commit -m "提交感言"
如果只是修改,並沒有添加新文件,可以直接用下面的命令:
git commit -a -m "提交感言"
將被修改文件加入索引並提交,一次完成全過程。
在修改加入所索引后,如果想看看索引內容中都所了什么修改,可以用:
git diff --cached
適合在提交前做最后的code review。
取消上一次提交(文件會回退上次提交之前,但會新加一條log)
git revert HEAD
刪除前面兩次提交
git reset --hard HEAD~~
查看最近一次提交的內容,可以使用
git show (hash-code filename)
修改中隨時查看當前代碼庫的狀態:
git status
相當於svn status
5. 提交到svn
1. 為了方便解決沖突問題,首先將本分支當中的修改保存在git棧中
git stash
2. 讓當前分支和遠程svn同步:
git svn rebase (類似於svn up)
3. 再將本地的修改從棧中彈出
git stash apply
4. 如果有沖突
沖突示例:
<<<<<<< Updated upstream
#xyj2
=======
#xyj
#xyj1
>>>>>>> Stashed changes
說明:
<<<<<<< Updated upstream
#xyj2
以上顯示的是svn上面的當前的狀態
#xyj
#xyj1
>>>>>>> Stashed changes
以上顯示的是本地分支的當前狀態
兩個版本有沖突,直接手動修改以上提示的沖突即可。修改完畢一定要提交到分支,否則切換不到主分支(master)。
切換到主分支
當前分支是master
$ git checkout master(切換分支)
把剛剛修改的分支中的內容Merge進來:
$ git merge new_branch(將分支new_branch合並到master分支)
然后將所有已經合並到master分支的本地修改提交到svn
git svn dcommit
如查代碼已經commit, 但是想對此次提交進行修改
git commit --amend, 如果沒有修改文件,就是修改上次提交的log,
如果修改了文件,並且git add file,則即修改文件,又提修改了上次提交的log。
如果想放棄上一次的提交
git revert HEAD,該條命令會取消上一次的提交,並且會添加一個新的log。
git reset HEAD~ 取消上次的提交
git reset ORIG_HEAD 恢復上次的提交
git rebase -i HEAD~~ ,將最后行的pick改為s,即可以合並前兩次的提交
Patch的使用
生成patch
git diff > patch_file
使用patch
git apply patch_file
git apply應用補丁時會檢測空白錯誤,默認情況下,尾部空白,包含空白的空行,初始tab縮進之后緊跟的空白字符會被認為是錯誤。
處理這個錯誤的行為由命令行參數--whitespace或者core.whitespace配置來控制,共有5種可能的動作:
- nowarn
關閉錯誤提示
- warn
輸出部分錯誤提示,但完整的應用補丁,不會處理錯誤,這是默認動作。
- fix
輸出部分錯誤,修正錯誤后應用補丁
- error
輸出部分錯誤,拒絕應用補丁。
- error-all
輸出全部的錯誤,拒絕應用補丁。
查看某次提交的文件
git co hash-code (這會直接生成一個匿名分支,看完文件后直接git co other-branch,這個分支會自動刪除)
