最近建了新項(xiàng)目田藐,為方便代碼托管,將代碼放在本地一臺(tái)公用mac盒子上進(jìn)行托管兑徘,方便其他組員共同管理代碼刚盈。
簡(jiǎn)單總結(jié)下使用,方便其他成員使用和之后任務(wù)交接調(diào)度:
//打開你的終端挂脑,首先遠(yuǎn)程連接公用的mac盒子藕漱,輸入盒子的密碼就可以連接
ssh git@172.16.16.153
如果連接失敗,說明你沒開啟遠(yuǎn)程的ssh 崭闲,可以參照Mac搭建Git服務(wù)器—開啟SSH
//通過下面兩個(gè)命令進(jìn)入指定文件夾中
ls //查看當(dāng)前目錄下文件和文件夾
cd //進(jìn)入指定文件夾
如圖肋联,我進(jìn)入了名為repos的文件夾中
//輸入如下命令,創(chuàng)建一個(gè).git文件刁俭,并初始化一個(gè)空的倉庫
mkdir BaiShiTV.git
cd BaiShiTV.git
git --bare init
至此橄仍,完成了BaiShiTV.git
初始化
接下來進(jìn)入本地項(xiàng)目,設(shè)置一下遠(yuǎn)程路徑
git remote add origin git@172.16.16.153:repos/BaiShiTV.git
git push origin master
注意:路徑最好不要包含中文字符牍戚。
完成設(shè)置后,就可以通過xcode->source control進(jìn)行commit 如孝、push宪哩、pull,和創(chuàng)建分支第晰,merge分支等锁孟。
可以在終端輸入如下命令,下載遠(yuǎn)程代碼
git clone git@172.16.16.153:repos/BaiShiTV.git
怎么修改Git remote add時(shí)使用的遠(yuǎn)程倉庫
三種方式都可以茁瘦。
- 修改命令
git remte origin set-url URL
- 先刪后加
git remote rm origin
git remote add origin git@github.com:Liutos/foobar.git
- 直接修改config文件
git使用相關(guān)blog收藏
跟多問題參考
git config --global user.name "xxx"
git config --global user.email "xxx@xxx.xxx"
git init ;在當(dāng)前目錄創(chuàng)建版本庫
git add xxx ; 添加xxx文件
git commit -m “comment” xxxx; 提交到倉庫
git status ;查看當(dāng)前的狀態(tài)及結(jié)果
git log ; 查看歷史記錄
git reflog ;查看每一次的log
git --graph --pretty=oneline --abbrev-commit;按照一定的格式查看log
git reset --hard HEAD^; 恢復(fù)到當(dāng)前版本的上一版本
; HEAD指當(dāng)前版本 ^指上一版本
git add把文件添加到暫存區(qū)
git commit 提交更改品抽,把暫存區(qū)的所有修改提交到當(dāng)前分支
git checkout -- xxx; 讓這個(gè)文件回到最近一次git commit或git add時(shí)的狀態(tài)
git reset HEAD file可以把暫存區(qū)的修改撤銷掉,已經(jīng)add的文件腹躁,在commit之前可以恢復(fù)
刪除rm文件后桑包,使用git status查看狀態(tài),如果想恢復(fù)被刪除的文件可使用git checkout -- xxx纺非; 如果要真正的從版本庫里刪除哑了,請(qǐng)使用git rm xxx 并使用git commit提交文件
ssh-keygen -t rsa -C "xx@xx.xx"; 生成ssh的公鑰和私鑰
1.本地與遠(yuǎn)程庫的關(guān)聯(lián)及上傳
1.1 .創(chuàng)建一個(gè)新的版本庫赘方,然后與github上新建的repo關(guān)聯(lián)起來
create a new repository on the command line
echo "# learngit" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:wsljmlin/learngit.git
git push -u origin master ; 第一次上傳弱左,代碼從本地分支上傳到遠(yuǎn)程
由于遠(yuǎn)程庫是空的窄陡,我們第一次推送master分支時(shí),加上了-u參數(shù)拆火,Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支跳夭,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來
之后上傳使用git push origin master即可
1.2 把一個(gè)本地的版本庫與遠(yuǎn)程的關(guān)聯(lián)起來
push an existing repository from the command line
git remote add origin git@github.com:wsljmlin/learngit.git
git push -u origin master
從遠(yuǎn)程庫克隆一個(gè)本地庫
git clone git@githubxxxx/xx.git
分支管理
git checktout -b dev; 創(chuàng)建dev分支并切換過去
相當(dāng)于git branch dev && git checkout dev
git branch; 查看所有的分支以及當(dāng)前所片的分支
git merge dev; 把dev分支的工作成果合并到當(dāng)前分支上
其中fast-forward指合并是“快速模式”
git branch -d dev; 刪除dev分支
解決沖突
多是兩個(gè)分支的最新版本不一致在提交時(shí)引起的们镜,在提交后的文件帶<<<和>>>的币叹,直接修改再提交就可以解決沖突
合并分支時(shí),如果可能模狭,Git會(huì)用Fast forward模式颈抚,但這種模式下,刪除分支后嚼鹉,會(huì)丟掉分支信息.
如果要強(qiáng)制禁用Fast forward模式贩汉,Git就會(huì)在merge時(shí)生成一個(gè)新的commit,這樣锚赤,從分支歷史上就可以看出分支信息
git merge --no-ff -m "merge with no-ff" dev; 不使用快速模式merge匹舞,可以看到分支信息
分支管理基本原則:
1.1 master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本线脚,平時(shí)不能在上面干活
1.2干活都在dev分支上赐稽,也就是說,dev分支是不穩(wěn)定的酒贬,到某個(gè)時(shí)候又憨,比如1.0版本發(fā)布時(shí),再把dev分支合并到master上锭吨,在master分支發(fā)布1.0版本
1.3 團(tuán)隊(duì)人都有自己的分支蠢莺,然后再合并到dev分支
bug分支
1.1 使用git stash儲(chǔ)存當(dāng)前工作區(qū)
1.2 新建bug分支進(jìn)行bug修改并合并到master分支
1.3 回到工作dev分支,使用git stash pop
git stash list零如; 查看緩存區(qū)中的內(nèi)容
1.4 你可以多次stash躏将,恢復(fù)的時(shí)候,先用git stash list查看考蕾,然后恢復(fù)指定的stash祸憋,用命令:git stash apply stash@{0}
git branch -D xx; 強(qiáng)行刪除xx分支
多人協(xié)作
git remote ; 查看遠(yuǎn)程庫的信息
git log origin/master
git log origin/dev --oneline
git remote -v; 查看遠(yuǎn)程庫更詳細(xì)的信息,顯示可推送和抓取的origin的地址
git push origin dev; 把本地的dev分支推送到遠(yuǎn)端(會(huì)在遠(yuǎn)端創(chuàng)建dev分支)
分支管理:
1. master分支是主分支肖卧,因此要時(shí)刻與遠(yuǎn)程同步蚯窥;
2. dev分支是開發(fā)分支,團(tuán)隊(duì)所有成員都需要在上面工作,所以也需要與遠(yuǎn)程同步拦赠;
3. bug分支只用于在本地修復(fù)bug巍沙,就沒必要推到遠(yuǎn)程了,除非老板要看看你每周到底修復(fù)了幾個(gè)bug荷鼠;
4.feature分支是否推到遠(yuǎn)程句携,取決于你是否和你的小伙伴合作在上面開發(fā)。
你的小伙伴要在dev分支上開發(fā)允乐,就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地矮嫉,于是他用這個(gè)命令創(chuàng)建本地dev分支:
$ git checkout -b dev origin/dev
若你與小伙伴的上傳遠(yuǎn)端有沖突,可以先使用git pull把最新的版本更新下來牍疏,再合并解決沖突
如果git pull也失敗了蠢笋,原因應(yīng)該是沒有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接,根據(jù)提示麸澜,設(shè)置dev和origin/dev的鏈接:
$ git branch --set-upstream dev origin/dev
然后再git pull解決完再使用上傳
多人協(xié)作的工作模式通常是這樣:
1.1 首先挺尿,可以試圖用git push origin branch-name推送自己的修改奏黑;
1.2 如果推送失敗炊邦,則因?yàn)檫h(yuǎn)程分支比你的本地更新,需要先用git pull試圖合并熟史;
1.3 如果合并有沖突馁害,則解決沖突,并在本地提交蹂匹;
1.4 沒有沖突或者解決掉沖突后碘菜,再用git push origin branch-name推送就能成功!
1.5 如果git pull提示“no tracking information”限寞,則說明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒有創(chuàng)建忍啸,用命令git branch --set-upstream branch-name origin/branch-name。
標(biāo)簽管理
git tag; 查看當(dāng)前分支的所有tag
git tag v1.0; 設(shè)置當(dāng)前版本的tag
git tag v1.0 Id; 設(shè)置id為Id的版gie本的tag
git show v1.0; 查看tag的版本信息
git tag -a v0.1 -m "version 0.1 released" ID; 創(chuàng)建帶有說明的標(biāo)簽
git tag -d v0.1 ; 刪除tag
git push origin v1.0; 將tag上傳上遠(yuǎn)端
git push origin --tags履植;一次性將所有tag上傳到遠(yuǎn)端
刪除遠(yuǎn)程標(biāo)簽先刪除本地再從遠(yuǎn)程刪除:
git tag -d v0.9 && git push origin :refs/tags/v0.9; 注意空格
git配置
忽略文件的原則是:
1.1 忽略操作系統(tǒng)自動(dòng)生成的文件计雌,比如縮略圖等;
1.2 忽略編譯生成的中間文件玫霎、可執(zhí)行文件等凿滤,也就是如果一個(gè)文件是通過另一個(gè)文件自動(dòng)生成的,那自動(dòng)生成的文件就沒必要放進(jìn)版本庫庶近,比如Java編譯產(chǎn)生的.class文件翁脆;
1.3 忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件
自己定義.gitignore文件
配置別名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"