git、snv、repo等版本管理工具使用对比
????????git是我們最常用的代碼倉庫管理工具,repo 是一款批量管理git的工具。
1、repo安裝
????????確保主目錄下有一個 bin/ 目錄,并且該目錄包含在路徑中:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
下載 repo 工具,并確保它可執行:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
2、多個版本管理工具
?3、SVN與Git對比
4、repo常用命令
repo init -u URL -b ........ # 創建.repo
repo upload # 將代碼提交到gerrit.
repo abandon master # 放棄master分支
repo forall -c "git reset --hard HEAD" # 所有代碼執行git命令,回退到HEAD
# repo sync相當于git clone會把repository中的所有內容拷貝到本地,非首次運行repo sync相當于更新和合并.
# repo sync會更新.repo下面的文件,如果在merge的過程中出現沖突,這需要手動運行git rebase --continue.
repo sync -c -j 4
repo start master --all # 創建新分支
5、git-svn常用命令
# 下載一個 SVN 項目和它的整個代碼歷史,并初始化為 Git 代碼庫
$ git svn clone -s [repository]
# 查看當前版本庫情況
$ git svn info
# 取回遠程倉庫所有分支的變化
$ git svn fetch
# 取回遠程倉庫當前分支的變化,并與本地分支變基合并
$ git svn rebase
# 上傳當前分支的本地倉庫到遠程倉庫
$ git svn dcommit
# 拉取新分支,并提交到遠程倉庫
$ svn copy [remote_branch] [new_remote_branch] -m [message]
# 創建遠程分支對應的本地分支
$ git checkout -b [local_branch] [remote_branch]
6、git常用命令
git log # 查看當前庫的git log信息
git log -p -2 # -2 來僅顯示最近兩次提交
git show # 的命令顯示當前HEAD上的最近一次的提交(commit)
git log -n1 -p # 同上
git status ./ # 查看當前庫的狀態
git reset HEAD~1 # 將當前庫恢復到HEAD的上一個版本
git diff ./ # 比較當前庫的修改情況
git add ./ # 將當前庫的代碼修改提交到暫存區
git commit ./ # 將代碼提交到本地分支
git commit --file ../commit_log.txt # 指定messege文件
git commit --amend ./ # 追加修改
# git commit 加上 -a 選項,Git 就會自動把所有已經跟蹤過的文件暫存起來一并提交,從而跳過 git add 步驟
# 如果你的提交信息(commit message)寫錯了且這次提交(commit)還沒有推(push), 你可以通過下面的方法來修改提交信息(commit message)
git commit --amend --only -m 'xxxxxxx'
# 想從一個提交(commit)里移除一個文件
git checkout HEAD^ myfile
git add -A
git commit --amend
# 刪除我的的最后一次提交(commit)
git reset HEAD^ --hard
git push -f [remote] [branch]
cd git_work # 找一個干凈目錄,假設是git_work
git clone http://myrepo.xxx.com/project/.git # 這樣在git_work目錄下得到一個project子目錄
cd project
git branch -a # 列出所有分支名稱如下:
remotes/origin/dev
remotes/origin/release
git checkout -b dev22 remotes/origin/release #是checkout遠程release分支,在本地起名為dev22分支,并切換到本地的dev22分支
git checkout -b dev11 remotes/origin/dev # 作用參見上一步解釋
git checkout dev22 #切換回release分支,并開始開發。
git pull # 更新本地倉庫及本地暫存區及工作目錄
git commit --author 'Freyll<hell@github.com>' --file ../commit_log.txt
git commit --amend --author 'Freyll<hell@github.com>' --file ../commit_log.txt
# commit_log.txt中添加Change-Id:Id89afdd8cb
git push origin HEAD:refs/dev22/master # 提交代碼到遠程分支
git branch -d dev22 # 刪除本地分支dev22
git config -l # 參看配置信息
git show HEAD^ # 查看HEAD的上一個版本信息
git show HEAD~4 # 查看HEAD的上溯4代的信息
git reset --hard HEAD^^ # 回退兩個版本
git reset --hard 8308f03 # 回退到指定的commitID前7位的版本
git reset 9e5e64a # 將會使 master 指向 9e5e64a --hard 會強制覆蓋了工作目錄中的文件
git clean -dfx #清除庫上沒有的東西
git remote -v # 參看遠程倉庫
git branch -a # 參看遠程分支
# 查看當前git分支所屬
git branch -vv
git branch | grep "*"
# git log 附帶一系列的總結性選項。如想看到每次提交的簡略的統計信息,你可以使用 --stat 選項
git log --stat
# --shortstat 只顯示 --stat 中最后的行數修改添加移除統計
# --name-status 顯示新增、修改、刪除的文件清單。
git log --oneline --decorate --graph --all # 圖像顯示git log信息
git log --pretty=format:"%h - %cd %s" --graph # 列出指定格式的log
git log -since="2 weeks ago" # 顯示2周前到現在所有的歷史記錄
git reflog # 查看引用日志
# 從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除(確切地說,是從暫存區域移除),然后提交
git rm
# git mv ...
# 下載遠程倉庫的所有變動
git fetch [remote]
# 顯示所有遠程倉庫
git remote -v
# 顯示某個遠程倉庫的信息
git remote show [remote]
# 增加一個新的遠程倉庫,并命名
git remote add [shortname] [url]
# 取回遠程倉庫的變化,并與本地分支合并
git pull [remote] [branch]
# 上傳本地指定分支到遠程倉庫
git push [remote] [branch]
# 強行推送當前分支到遠程倉庫,即使有沖突
git push [remote] --force
# 推送所有分支到遠程倉庫
git push [remote] --all
# git fetch origin 會抓取克隆(或上一次抓取)后新推送的所有工作
# git fetch 命令會將數據拉取到你的本地倉庫 - 它并不會自動合并或修改你當前的工作
git fetch [remote-name]
#如果你使用 clone 命令克隆了一個倉庫,命令會自動將其添加為遠程倉庫并默認以 “origin” 為簡寫。
#所以,git fetch origin 會抓取克隆(或上一次抓取)后新推送的所有工作。
#必須注意 git fetch 命令會將數據拉取到你的本地倉庫 - 它并不會自動合并或修改你當前的工作。
#當準備好時你必須手動將其合并入你的工作。
#git clone 命令會自動設置本地 master 分支跟蹤克隆的遠程倉庫的 master 分支(或不管是什么名字的默認分支)。
#運行 git pull 通常會從最初克隆的服務器上抓取數據并自動嘗試合并到當前所在的分支
#當 git fetch 命令從服務器上抓取本地沒有的數據時,它并不會修改工作目錄中的內容。它只會獲取數據然后讓你自己合并。
#git pull 在大多數情況下它的含義是一個 git fetch 緊接著一個git merge 命令。
#不管它是顯式地設置還是通過clone或checkout 命令為你創建的,git pull都會查找當前分支所跟蹤的服務器與分支,從服務器上抓取數據然后嘗試合并入那個遠程分支。
#由于 git pull 的魔法經常令人困惑所以通常單獨顯式地使用 fetch 與 merge 命令會更好一些。
# 當你想要將 master 分支推送到 origin 服務器時(再次說明,克隆時通常會自動幫你設置好那兩個名字),那么運行這個命令就可以將你所做的備份到服務器
git push origin master
# 查看某一個遠程倉庫的更多信息
git remote show origin
#to discard changes in working directory是一個危險的命令,你對那個文件做的任何修改都會消失.
git checkout -- <file>..."
# 恢復暫存區的指定文件到工作區
git checkout [file]
# 恢復某個commit的指定文件到暫存區和工作區
git checkout [commit] [file]
# 恢復暫存區的所有文件到工作區
git checkout .
# 重置暫存區的指定文件,與上一次commit保持一致,但工作區不變
git reset [file]
# 重置暫存區與工作區,與上一次commit保持一致
git reset --hard
# 重置當前分支的指針為指定commit,同時重置暫存區,但工作區不變
git reset [commit]
# 重置當前分支的HEAD為指定commit,同時重置暫存區和工作區,與指定commit一致
git reset --hard [commit]
# 重置當前HEAD為指定commit,但保持暫存區和工作區不變
git reset --keep [commit]
# 新建一個commit,用來撤銷指定commit
# 后者的所有變化都將被前者抵消,并且應用到當前分支
git revert [commit]
# 暫時將未提交的變化移除,稍后再移入
git stash
git stash pop
總結
以上是生活随笔為你收集整理的git、snv、repo等版本管理工具使用对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java--SimHash实现文本标题内
- 下一篇: WLAN消失,怎么办?