1.Git簡介
關於Git是什么,閱讀博客Git簡介
2.Git 基礎
Git命令很多,常用命令如下圖
- Workspace:工作區
- Index/Stage :暫存區
- Local Repository: 本地倉庫
- Remote Repository:遠程倉庫
工作區、暫存區和本地倉庫,邏輯上是本地計算機。當我們新建一個文件時,文件位於工作區,處於已修改(modified)狀態,表明文件已進行了修改,但還沒有提交保存;通過命令git add
將其添加到暫存區,文件是已暫存(staged)狀態,表示把已修改的文件放到下次提交時要保存的清單中;通過命令git commit
將文件放入本地倉庫,文件為已提交(commited)狀態,表示該文件已經被安全地保存在本地數據庫中,到這一步可以說是成功生成了一個新的版本。
遠程倉庫用來將本地倉庫上傳到網絡,實現備份、共享和合作。我們選用開源中國的碼雲Git@OSC作為代碼托管平台。
3.安裝Git
- 到Git官網https://www.git-scm.com/ 下載Git客戶端
- 安裝時選擇默認即可。
- 安裝完成后在桌面的快捷菜單中選擇
Git Bash Here
或者在開始菜單中選擇Git Bash
: - 在Git Bash中執行命令
git --version
查看版本,證明Git安裝成功
4.Git和碼雲的關聯
4.1 在碼雲注冊賬號
登錄碼雲 http://git.oschina.net/注冊賬號
4.2 配置Git
因為Git是分布式版本控制系統,必須在Git中配置本機的用戶名和Email地址
- 執行命令
git config --global user.name "你的用戶名"
,告訴git你的名字,這個用戶名會出現在提交記錄中 - 執行命令
git config --global user.email "你的郵箱"
,告訴git你的郵箱, 這個郵箱也會出現在提交記錄中,注意Email盡量保持和你注冊碼雲的Email一致。
4.3 創建SSH Key
因為你的數據保存在遠程服務器,服務器需要對你的身份進行識別,SSH key 可以讓你的電腦和碼雲 Git@OSC 之間建立安全的加密連接。
運行命令ssh-keygen -t rsa -C "你的郵箱"
,會有三次提示輸入,直接回車即可。如果已經有SSH key,會提示是否覆蓋。
在用戶目錄下找到 .ssh
目錄,里面有一個id_rsa.pub
文件,保存的就是公鑰。
登錄碼雲,在SSH公鑰文本框里粘貼id_rsa.pub
文件的內容:
執行命令ssh -T git@git.oschina.net
,若返回Welcome to Git@OSC
,則證明添加成功。
Git使用SSH連接第一次驗證服務器的key時,需要你進行確認,此時輸入yes回車即可,注意一定是yes
而不是y
。
4.4 創建遠程倉庫
-
在碼雲中新建項目
-
創建項目,輸入項目名,選擇項目語言。
-
復制遠程項目倉庫的地址:選擇HTTPS,可以復制遠程項目倉庫的HTTPS地址,如
https://git.oschina.net/maoth/java-hebau.git
,選擇SSH,則復制遠程倉庫的SSH地址。如git@git.oschina.net:maoth/java-hebau.git
4.5 克隆遠程倉庫
如果從零開發,最好的方式是先創建遠程倉庫,然后克隆遠程倉庫。
建立目錄,如E:\java
,進入目錄后,右擊鼠標選擇Git Bash Here
打開命令窗口,執行命令 git clone <版本庫的地址>
,版本庫的地址可以是HTTPS
地址,也可以是SSH
地址。如果前面創建了SSH Key
,那么版本庫就應該使用SSH
地址。
可以看到,遠程倉庫的項目已經下載到了本地。下面就可以在本地編寫代碼了。
5.本地Git的使用
5.1 初始化倉庫(Git init)
如果已經克隆了遠程倉庫,這一步可以省略。如果沒有克隆遠程倉庫,需要創建一個新的Git代碼庫。
運行git init
命令初始化倉庫,將會創建一個.git
文件夾,這個文件夾是Git來跟蹤管理版本庫。
5.2 添加文件(Git add)
在當前文件夾下創建一個HelloWorld.java程序
使用git status
命令可以查看當前倉庫狀態
提示說明有未跟蹤(untracked)的文件,可以使用git add <file>
加進去,通常我們使用git add -A
命令,將所有相關文件存放到暫存區,此時git就可以跟蹤該文件了。
再次使用git status
命令可以看到發生的變化,提示changes to be committed
說明可以進行提交了。
5.3 提交(Git commit)
使用git commit -m "提交信息"
命令將暫存區的所有文件提交到本地倉庫,提交時要求寫上提交信息,注意雙引號必須是英文半角的。
提交后用git log
查看提交記錄
5.4 文件修改和撤銷
對文件進行修改后,通過git status
查看,顯示一個文件進行了修改:
可以執行git diff
查看文件做了哪些修改:
紅色字體表示是刪除的內容,綠色字體表示是添加的內容。
如果想撤銷這些修改,執行git checkout 文件名
文件修改后,進行add和commit就行了。
文件add后尚未commit時,可以通過命令git reset HEAD 文件名
進行撤銷
文件commit后,用git log
查看提交記錄,現在已經有三個提交的版本了。每個版本都有一行黃色commit
開頭的哈希字串,這是每個提交的唯一ID。
文件已經提交后,如果想撤銷,則執行git reset --hard 9316bda
(取哈希字串的前7位即可),提示HEAD已經指向9316bda了,用git log
查看,本地倉庫已經回退到第一個版本了。
5.5 中文亂碼問題
- 關於
git status
中文亂碼問題,可以執行git config --global core.quotepath false
命令。 - 針對windows平台的亂碼問題,一勞永逸的辦法當然是采用全英文了。
6. 遠程同步
6.1 推送本地倉庫的更新到遠程倉庫
-
文件提交到本地倉庫后,可以執行
git push origin master
將本地倉庫上傳到遠程倉庫,默認情況下,origin
指的是本地倉庫在遠程倉庫的版本,master
指的是本地倉庫的master分支。第一次push的時候,可能需要輸入在碼雲注冊的用戶名和密碼。
-
查看碼雲項目頁面,文件HelloWorld.java已經上傳到服務器。
6.2 抓取遠程倉庫的更新到本地倉庫
執行git clone
命令后,自動創建了本地的master
分支,用於跟蹤遠程倉庫中的origin/master
分支。當遠程倉庫的內容更新后,可以通過命令git pull
或者 git pull origin master
, 將更新的數據抓取到本地倉庫,合並到工作目錄的當前分支。
執行git pull
命令時,本地做的提交和服務器上的提交可能有差異,導致合並沖突,此時,需進行沖突處理。具體參考如何處理代碼沖突
7.關於init倉庫遠程同步存在的問題
對於克隆的遠程倉庫,其使用的基本流程如下:
- 克隆遠程倉庫
- 創建文件
- 添加(git add)
- 提交(git commit)
- 推送(git push)
如果沒有從遠程克隆倉庫,則需要在本地通過git init
命令初始化倉庫,在commit之后,不能直接進行遠程推送(push),必須先建立本地倉庫和遠程倉庫的關聯。
運行git remote add origin 遠程倉庫的ssh地址
命令用於添加遠程倉庫
執行git push -u origin master
命令,加上-u參數,Git不但會把本地的master分支內容推送到遠程倉庫,還會把兩者關聯起來。
此時,提示push
失敗,原因是遠程倉庫中有本地沒有的文件,需要先pull
下來。執行pull
命令
依然報錯,提示fatal: refusing to merge unrelated histories
,拒絕合並互不相關的項目,那么,我們在執行命令時需要添加參數,即git pull origin master --allow-unrelated-histories
。
執行命令后,會出現提交的提示信息:
這是VIM文本編輯器
操作命令:
進入到輸入狀態:按i鍵
從輸入狀態退出:Esc鍵
—— Shift+;鍵
—— wq!(保存並退出)或q!(不保存退出)
——Enter
出現pull
成功的信息
最后執行推送命令git push -u origin master
遠程同步成功,到遠程倉庫查看項目,會發現文件HelloWorld.java已經同步到遠程倉庫。
以后在commit
后需要同步到遠程倉庫時,只要直接執行git push
命令就行了。
上面只是簡單介紹了Git的使用,更為系統的學習可參考下列資料: