GIT
Linus:
????????????????I’m an egotistical bastard, and I name all my projects after myself. First Linux, now git.
官方指南:https://git-scm.com/book/zh/v2
一圖勝千言:

Git 是一個版本控制工具,它能實現(xiàn)團隊中的代碼協(xié)作開發(fā),在代碼同步和管理方面功能強大、理念先進。
Git 是當(dāng)下最流行的分布式版本控制工具,輕量級,但功能強大,由 linux 之父 linus 開發(fā)。它的使用特別廣泛,尤其開源社區(qū)基本都用它作為版本控制工具。我們每個人也要盡量掌握它。
而網(wǎng)站 github.com 是基于 git 工具的一個代碼托管網(wǎng)站,目前基本所有知名的開源項目都選擇把代碼部署到這個網(wǎng)站。這里的代碼包羅萬象,是個學(xué)習(xí)的天堂。實屬居家旅行、殺人拿塔的必備網(wǎng)站。
如果想用 git 工具下載同步代碼,方法如下:
#1. 進入 git bash,切換到相應(yīng)目錄,比如,e 盤下的 course 目錄:
cd/e/course/
#2. 如果是第一次下載,執(zhí)行以下命令
git clone https://github.com/13431/notes.git
#3. 如果不是第一次下載,只是更新代碼,執(zhí)行以下命令。
#ps. 要經(jīng)常運行這個命令,保持與服務(wù)器的同步
cd/e/course/notes/
git pull
這是 Git 的一個教程,大家有時間可以按照上面的看看、練練,以后務(wù)必掌握基本用法:?Git 廖雪峰 教程
下面總結(jié)了一下常用的基本命令:
## 修改 .gitconfig 文件,這是 git 的配置文件
vi~/.gitconfig
## 初始化 版本庫
git init
git init-db
## 添加忽略文件。這個文件控制,哪些文件不要被提交
echo "*.svn" > .gitignore
## 將改變增加至索引
git add .
## 從索引寫入到庫
git commit -m "提交到版本庫"
git commit -a -m "提交,連同所有未 add 的修改文件"
git commit --amend -a -m "替換最后一次的提交信息"
## 查看修改了什么東西
git diff
git diff --cached
git status
## 回撤版本,重新提交。后悔藥。
git reset HEAD^ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 回撤到上一版本,默認是 --mix 形式,另有 --soft 和 --hard 形式
git status ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 可以看到,上一版本提交的文件沒有增加到 index 的狀態(tài)
git add/commit... ? ? ? ? ? ? ? ? ? ? ? ? # 做完處理后,重新提交?
## 查看日志,歷史記錄
git show
git log
git log --pretty=oneline ? ? ? ? ? ? ? ? ? ? ? ? ? ? #定制 log 的顯示樣式
git log -2 -p ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #顯示最近兩次提交的詳細信息
git log --stat --summary ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#簡要顯示每次更新的統(tǒng)計信息(提交過那些文件,有多少行修改)
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'--abbrev-commit
## 增加/查看/切換/刪除 分支
git branch ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #查看分支
git branch 1234 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#創(chuàng)建分支 1234
git branch 1234 343223 ? ? ? ? ? ? ? ? ? ? ? ? ? #以 343223 為起點創(chuàng)建1234 分支
git checkout 1234 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#切換到分支 1234????
git checkout -b tmp ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#創(chuàng)建并切換到分支 tmp
git branch -D tmp ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#刪除分支 tmp
## 合并工作到主分支(1234 -> master)
git checkout master ? ? ? ? ? ? ? ? ? ? ? ?#切換到主分支
git merge HEAD 1234 ? ? ? ? ? ? ? ?#將 1234 的最新版本合并到當(dāng)前分支
git pull.1234 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#相當(dāng)于 git fetch && git merge
## 生成并應(yīng)用補丁,這是另外一個合并工作的方法。暫時不需要搞太清楚。
git format-patch master>A.patchgit checkout master????????????????????#先生成補丁文件,再切換到分支目錄
git apply A.patch ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #應(yīng)用補丁文件到當(dāng)前分支
git add/commit... ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #然后提交修改
## 下載/上傳/更新 信息到指定版本庫
git clone git://192.168.1.1/repo.git
git push git://192.168.1.1/repo.git 1234:master
git pull git://192.168.1.1/repo.git master:1234
git fetch public
## 其他命令:
git tag ? ? ? ? ? ? ? ? ? ? ? ? ? ? #將某個版本做個標(biāo)記,即賦予一個好記的名字
git gc ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#垃圾收集,能大大減小版本庫大小
git repack ? ? ? ? ? ? ? ? ? ? ?#同上,也能大大減小版本庫大小
git ls-tree HEAD ? ? ? ? ? ? ? ?#查看版本庫中的文件結(jié)構(gòu),下面語句是跟 awk 合作,打印整個目錄結(jié)構(gòu)
git ls-tree -r HEAD|awk'{print $4}'>d:/home/index/repTree
git whatchanged ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #顯示某個版本改變了哪些文件
git show-branch ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#顯示分支變動情況
git reflog ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #顯示所有變更歷史(跟 git log 不同)
git clone ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #相當(dāng)于 git init && git fetch
git pull ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #相當(dāng)于 git fetch && git merge
git rebase ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#git merge 外,合并倉庫的另一種形式
## 下面的例子是建立一個純倉庫,并作為開發(fā)的中心倉庫(即 GIT 服務(wù)端)
git clone --bare /workspace/hnpmi /repo/1234.git ? ? ? ? ? ? ? ?#創(chuàng)建一個新的純倉庫,用于備份、共享
cd/workspace/1234 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #這是我們的工作目錄
git remote add origin /repo/1234.git ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#將剛才新建的倉庫添加為我們的遠程分支
git push origin master ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #本地的 master 分支有更新,同步到遠程分支
Subversion
首先,下載可愛的小烏龜:
wget https://nchc.dl.sourceforge.net/project/tortoisesvn/1.9.5/Application/TortoiseSVN-1.9.5.27581-x64-svn-1.9.5.msi
其次,如果想使用 svn 從服務(wù)器上下載東西:
svn checkout http://svn.apache.org/repos/asf/struts/struts2
svn co http://svn.apache.org/repos/asf/struts/struts2
如果想同步代碼:
svn update
查看當(dāng)前代碼的修改情況:
svn status
svn st
如果想提交代碼:
svn commit -m 我的注釋
svn ci -m "My Message"
查看日志:
svn log
尋求幫助
svn --help
svn update --help
搭建服務(wù)器
首先,創(chuàng)建一個 svn 庫:
svnadmin create /var/svn/aaa
修改下面的 conf/svnserver.conf 文件,將下面幾條注釋去掉
anon-access = read # 匿名用戶只能讀,不能改
anon-access = write? ? ? # 已登錄用戶,可以修改
password-db = passwd? ? # 指明驗證文件的名字
其次,開啟服務(wù):
svnserve --daemon --root /tmp/bbb
然后,就可以訪問了
svn co svn://ip
導(dǎo)入文件夾到項目,可以用 import 命令:
svn import ~/hello svn://ip/hello