git-svn使用


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,這個分支會自動刪除)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM