1、安裝Git
細節我就不說了,注意事項如下:
安裝完成后,還需要最后一步設置,在命令行輸入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。你也許會擔心,如果有人故意冒充別人怎么辦?這個不必擔心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的。
注意git config命令的--global參數,用了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址
2、選擇或者新建一個文件夾,將你要上傳的文件放到該文件夾下面,在該文件夾下右鍵運行Git,輸入命令:
git init
這時會在你的文件夾下生成一個隱藏的文件夾.git,有關本地操作的一些命令和之后需要用到的一些命令整理如下:
git add //將文件的修改提交到暫存區或者叫版本庫中去
git commit -m "有關這次提交的描述" //將文件的修改生成一個提交點,有唯一的ID與之對應。
git status //查看當前的文件狀態,我建議大家修改一個文件看看狀態,add后再看看狀態,commit后再看看他們的狀態。
git diff //查看被修改的文件與被修改之前的差異
git log //查看每次的提交信息
git log --pretty=oneline //查看提交信息,但是只顯示一條
git reset --hard HEAD^/HEAD^^/HEAD~100 //返回到上一個/2個/100個版本
git reset --hard 版本號 //回到所選的版本當中去,版本號可以用git log查看,版本號寫前幾位就行了。
git reflog //用來記錄你的每一次命令:
git log --graph --pretty=oneline --abbrev-commit //列出分支合並詳情
git diff HEAD -- filename //命令可以查看工作區和版本庫里面最新版本的區別
git checkout -- filename //就是把filename文件在工作區的修改全部撤銷,這里有兩種情況:一種是readme.txt自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;一種是readme.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。總之,就是讓這個文件回到最近一次git commit或git add時的狀態。
git rm test.txt //刪除文件之后必須提交
git checkout --filename //其實是用版本庫里的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。
ssh-keygen -t rsa -C "youremail@example.com" //創建一個私鑰和公鑰
git clone git@bitbucket.org:WechaoHe/homomorphic-encryption.git //遠程倉庫clone
git checkout -b dev //創建並切換到dev分支
git branch //查看分支
git branch dev //創建分支
git checkout dev //查看分支
git merge dev//合並制定分支到現在所在的分支,這次合並是“快進模式”,
git tag v0.9 版本號//為相應的提交版本打上標簽
git tag -d v0.1 //刪除相應的標簽
也就是直接把master指向dev的當前提交,若產生沖突則先手動改動,再提交git log查看
git branch -d dev //刪除分支
git remote -v //顯示遠程信息
git branch --set-upstream dev origin/dev //git pull也失敗了,原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示,設置本地dev和origin/dev的鏈接:
git push -u origin master //將倉庫里面的提交推到遠程
在本地操作熟悉之后呢,我們再來看看遠程連接操作。
3、現在我假設你已經掌握怎么使用Git,並且已經安裝好了,同時擁有自己的bitbucket賬號。
到目前為止,我們已經掌握了如何在Git倉庫里對一個文件進行時光穿梭,你再也不用擔心文件備份或者丟失的問題了。
由於你的本地Git倉庫和bitbucket倉庫之間的傳輸是通過SSH加密的,所以,需要一點設置:
第1步:創建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,我的目錄為C:\Users\admin\.ssh,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,Windows下打開Git Bash,創建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認值即可,由於這個Key也不是用於軍事目的,所以也無需設置密碼。
如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
第2步:登陸bitbucket,打開“Account settings”,“SSH Keys”頁面:
然后,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內容,bitbucket設置如下:


為什么bitbucket需要SSH Key呢?因為bitbucket需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協議,所以,bitbucket只要知道了你的公鑰,就可以確認只有你自己才能推送。
當然,bitbucket允許你添加多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家里提交,只要把每台電腦的Key都添加到bitbucket,就可以在每台電腦上往bitbucket推送了。
最后友情提示,在bitbucket上免費托管的Git倉庫,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放進去。
如果你不想讓別人看到Git庫,你可以創建自己的私有庫。
4、現在的情景是,你已經在本地創建了一個Git倉庫后,又想在bitbucket創建一個Git倉庫,並且讓這兩個倉庫進行遠程同步,這樣,bitbucket上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協作,真是一舉多得。
首先,登陸bitbucket,然后,創建一個新的倉庫。


建好的倉庫如上圖。
這時點擊我已經有了一個存在的項目。會看到如下圖:

第一個命令行是要你進入所在項目文件,你可以直接在相應文件下右鍵啟動Git,
第二個命令是建立本機與bitbucket的關聯,添加后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。
第三步,就可以把本地庫的所有內容推送到遠程庫上。
第四步是推送標簽,我們可以先不管。
把本地庫的內容推送到遠程,用git push命令,實際上是把當前分支master推送到遠程。
由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。
推送成功后,可以立刻在bitbucket頁面中看到遠程庫的內容已經和本地一模一樣
從現在起,只要本地作了提交,就可以通過命令:
$ git push origin master
把本地master分支的最新修改推送至bitbucket,現在,你就擁有了真正的分布式版本庫!
SSH警告:
當你第一次使用Git的clone或者push命令連接GitHub時,會得到一個警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
這是因為Git使用SSH連接,而SSH連接在第一次驗證GitHub服務器的Key時,需要你確認GitHub的Key的指紋信息是否真的來自GitHub的服務器,輸入yes回車即可。
Git會輸出一個警告,告訴你已經把GitHub的Key添加到本機的一個信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
這個警告只會出現一次,后面的操作就不會有任何警告了。
如果你實在擔心有人冒充GitHub服務器,輸入yes前可以對照GitHub的RSA Key的指紋信息是否與SSH連接給出的一致。
有關同步協作時常見的問題:
推送分支
推送分支,就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:
git push origin master
如果要推送其他分支,比如dev,就改成:
git push origin dev
抓取分支
多人協作時,大家都會往dev分支上推送各自的修改。
當你的小伙伴從遠程庫clone時,默認情況下,你的小伙伴只能看到本地的master分支。不信可以用git branch命令看看
現在,你的小伙伴要在dev分支上開發,就必須創建遠程origin的dev分支到本地,於是他用這個命令創建本地dev分支。
git checkout -b dev origin/dev
現在,他就可以在dev上繼續修改,然后,時不時地把dev分支push到遠程:
git push origin dev
你的小伙伴已經向origin/dev分支推送了他的提交,而碰巧你也對同樣的文件作了修改,並試圖推送:
git push origin dev
推送失敗,因為你的小伙伴的最新提交和你試圖推送的提交有沖突,解決辦法也很簡單,Git已經提示我們,先用git pull把最新的提交從origin/dev抓下來,然后,在本地合並,解決沖突,再推送:
$ git pull
git pull也失敗了,原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示,設置dev和origin/dev的鏈接:
$ git branch --set-upstream dev origin/dev
再pull:
$ git pull
這回git pull成功,但是合並有沖突,需要手動解決,解決的方法和分支管理中的解決沖突完全一樣。解決后,提交,再push
因此,多人協作的工作模式通常是這樣:
1、首先,可以試圖用git push origin branch-name推送自己的修改
2、如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合並;
3、如果合並有沖突,則解決沖突,並在本地提交;
4、沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name。
這就是多人協作的工作模式,一旦熟悉了,就非常簡單。
