之前在windows中一直采用github的桌面版,庫的建立更新都是借助軟件的幫助。所使用的的功能也非常局限,僅僅只是創建庫再提交自己的代碼。至於版本管理、回滾、分支以及git的結構都沒有清楚的認識。這次由於任務需要,在ubuntu中必須使用git來鏈接github,所以必須接觸一些git的命令,也對git的思想有了進一步的認識。這里簡單梳理以下,作為備忘錄。文末也附上我參考的博客,有興趣的可以進一步閱讀。
一些認識
之前對github和git一直傻傻分不清,以為是兩種不同的版本管理工具。現在才認識到git是一種版本管理工具,而github只是一個遠程倉庫。實際上沒有github這種遠程倉庫,你計算機中git也會建立一個本地的倉庫,或者鏈接到其他的遠程倉庫。
1. git的安裝
輸入命令安裝git,並查看版本以確認安裝成功。
sudo apt-get install git
git --version
2. git的使用
先解釋一些概念,git分四層管理代碼。
- 你目錄中的文件是第一層
- 緩存區,每次add之后,當前目錄中要追蹤的文件會作為一個版本會存放在緩存區。注意不是所有的文件。一般一個文件生成之后,會標記為“未追蹤”,但是否對其做版本管理還是要選擇的。例如一些編譯文件就沒有必要追蹤。對需要做版本管理的問件,用add添加,不需要的用clean刪除。
- 本地倉庫,每次commit之后,緩存區最新的版本就會存放在本地倉庫。這里要提及一個HEAD的概念。HEAD是當前的版本指向,每次更新或者回退都會修改HEAD的指向,但對倉庫中每一個版本並不會刪除。所以即使回退到過去還是有機會回到現在的版本的。
- 遠程倉庫,每次push之后,會將本地倉庫中HEAD所指向的版本存放到遠程倉庫
這里附上一些我常用的命令作為備忘錄,詳細的使用效果請參考我文末附上的博客鏈接。
命令 | 功能 |
---|---|
git init | 在本地的當前目錄里初始化git倉庫 |
git status | 查看當前倉庫的狀態 |
git add -A | 增加目錄中所有的文件到緩存區 |
git add file | 增加相應文件到緩存區 |
git commit -m "信息" | 將緩存區中更改提交到本地倉庫 |
git log | 查看當前版本之前的提交記錄 |
git reflog | 查看HEAD的變更記錄,包括回退 |
git branch -b branch_name | 建立一個新的分支 |
git diff | 查看當前文件與緩存區文件的差異 |
git checkout -- file | 取消更改,將緩存區的文件提取覆蓋當前文件 |
git reset --hard 版本號 | 回退到相應版本號,同樣也可以回退到未來的版本號 |
git clean -xf | 刪除當前目錄中所有未追蹤的文件 |
git config --global core.quotepath false | 處理中文文件名 |
這些命令用於處理本地倉庫的版本管理足夠了,下面我介紹與遠程倉庫打交道。
2. git與github的鏈接
首先我們認為你已經有一個github的賬戶。
然后我們要建立SSH鏈接。這是一種通訊的加密協議。我先在我的筆記本上計算一對公鑰和私鑰,將公鑰存儲在github中,這樣本地就可以通過SSH與github展開加密通訊。詳細的內容可以參考SSH原理與運用(一):遠程登錄。
建立方法,輸入命令
ssh-keygen -t rsa -C "your_email@youremail.com" //雙引號里面是你的常用郵箱
輸入之后要輸入口令,可以不用輸入直接按“enter”一路確認就可以了。然后在賬戶的根目錄(/或者/home/你的賬戶名,具體取決於你執行上述命令時所采用的賬戶)查找隱藏目錄.ssh/id_rsa.pub文件,將當中內容添加到github中。
這樣你就可以通過SSH鏈接到github中了。但是github作為一個遠程倉庫,你可以鏈接這個倉庫,並保持同步。但是你不能把本地倉庫直接上傳到github中去。所以你應該先在github中建立一個對應的倉庫,然后再在本地建立一個倉庫,將兩者進行鏈接,再去寫入文件執行版本管理。所用到的命令有
git remote add origin git@github.com:<用戶名>/<倉庫名>.git
git pull origin master //因為github建立倉庫時會有readme.md文件,先要拷貝一份
git push -u origin master //將本地倉庫鏈接到master分支上,你當然可以鏈接到其他分支
git push//上傳你的本地倉庫
還有一種方法不用分兩地建庫再去鏈接。你可以只在github上建庫,然后clone到本地目錄中。
git clone git@github.com:<用戶名>/<倉庫名>.git
至於團隊合作中的分支管理,由於現在還用不到,等以后有機會試用在去學習吧。