五、標簽管理
1.創建標簽
為方便查找文件版本,可以對版本號打上標簽,步驟如下:
Step1:切換到需要打標簽的分支上
Step2:用命令git tag [-a] <tagname> [-m] [“解釋性文字”] [版本id]
新建一個標簽,默認為HAED
版本,也可以加上commit id
指定任意版本。注:也可以加上選項-s
,用私鑰簽名一個標簽(PGP
簽名),具體用法百度可查。
命令git show <tagname>
可以看到說明文字,若加上了簽名,則也可以看到簽名信息
命令git tag
可以查看所有標簽
2.操作標簽
1)如果標簽打錯了,可通過命令git tag -d <tagname>
來將其刪除。因為創建的標簽都只存儲在本地,不會自動推送到遠程。所以打錯的標簽可在本地安全刪除。
2)若要推送某個標簽至遠程,可使用命令git push origin <tagname>
,或者使用命令git push origin --tags
將所有尚未推送到遠程的標簽一次性推送至遠程。
3)對于已經推送到遠程的標簽,如果想要刪除,則需要先用git tag -d <tagname>
將其在本地刪除,然后通過命令git push origin :refs/tags/<tagname>
將其從遠程刪除。
六、使用GitHub
1.GitHub中的一些功能解釋
功能 | 解釋 |
---|---|
Gist | 用于管理和發布一些沒必要保存在倉庫中的代碼。 |
Popular repository | 顯示用戶的公開倉庫中受歡迎的倉庫。 |
Contributions | 顯示每日用戶對倉庫的貢獻程度。 |
Contibution activity | 按時間順序顯示具體貢獻活動的鏈接。 |
watch | 相當于"訂閱",點擊后,在用戶的公開活動中會顯示該倉庫的更新。 |
star | 相當于"收藏",用戶可以在該標記中找到被star過的倉庫。 |
Fork | 將原項目復制到了自己的倉庫中,相當于在原有主分支上新建了一個分支。 |
code | 顯示該倉庫中的文件列表。 |
issue | 用于bug報告、功能添加、方向性討論等。 |
pull request | 代碼的更改和討論都可以在此進行。 |
pulse | 顯示該倉庫最近的活動信息。 |
Graphs | 以圖表形式顯示該倉庫的各項指標。 |
commits | 顯示當前分支的提交歷史。 |
branches | 查看倉庫的分支列表。 |
releases | 顯示倉庫的tag列表。 |
contributors | 顯示對該倉庫進行過提交的程序員名單。 |
raw | 直接在瀏覽器中顯示該文件的內容。 |
blame | 按行顯示最新提交的信息。 |
history | 查看該文件的歷史操作記錄。 |
2.在GitHub中參與一個開源項目的步驟如下:
Step1:訪問想要參與的項目主頁,點擊Fork
則將該項目倉庫復制到了自己的遠程庫下。注:在GitHub中,可以任意Fork開源倉庫。
Step2:將復制得到的內容從自己的遠程庫中clone
至本地倉庫。注意:一定要從自己的賬戶下clone
,只有這樣才可以推送修改至遠程,如果從作者賬號clone,則沒有推送修改的權限。
Step3:對其中的內容進行修改,工作完成后推送至自己的遠程庫。
Step4:如果希望作者接受你的修改,則可以在GitHub上發起一個pull request
。如果對方接受,則修改就合并到該項目中,開源項目即得到了完善。
七、自定義Git
一些常用的Git自定義功能
1.顯示不同的顏色
$ git config --global color.ui true
2.忽略特殊文件
忽略原則是:
1)操作系統自動生成的文件,比如縮略圖等;
2)編譯生成的中間文件、可執行文件等;
3)自己帶有敏感信息的配置文件,如存放口令的配置文件等。
忽略方法是:修改git工作區根目錄下的.gitignore
文件,將要忽略的文件名填進去,Git就會自動將其忽略(該文件本身要提交到Git,對其做版本管理)。
檢驗是否忽略的方法是:使用命令git status
查看是否提示working directory clean
。
命令git check-ignore
可用來檢查.gitignore
文件,例如:
$ git check-ignore -v App.class
.gitignore:3:*.class App.class
Git告訴我們,.gitignore
文件的第三行規則忽略了該文件。
3.配置別名
1)配置命令
有些命令比較繁瑣,可以用配置別名的方式對其做簡化,例如:
$ git config --global alias.st status
執行以上命令后,敲git st
則相當于git status
。
根據這種思想,我們可以給某些難于記憶的指令配置容易理解的別名,例如命令git reset HEAD file
可以將暫存區的修改撤銷掉,相當于一個unstage的操作,故可以對其配置一個unstage
別名:
$ git config --global alias.unstage 'reset HEAD'
配置完成后,敲入git unstage test.py
相當于命令git reset HEAD test.py
還有一些常用的配置:
$ git config --global alias.last 'log -1' #顯示最后一次提交的信息
$ 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"
2)配置文件
上述命令中,--global
是針對當前用戶的所有倉庫起作用的,若不加該參數,則只對當前倉庫生效。
每個倉庫的配置文件都位于.git/config
文件中,可使用cat
命令查看該文件。別名位于[alias]
后面,要刪除別名,直接將對應行刪掉即可。(注:當前用戶的Git配置文件放在用戶主目錄下的隱藏文件.gitconfig
中。)
若要用命令刪除一個已定義的別名,可采用
$ git config --global --unset alias.xxx
刪除別名為xxx的修改。
4.搭建Git服務器
如果不想公開源代碼,又不愿意為GitHub私有倉庫付費,可以選擇自己搭建一臺Git服務器作為私有倉庫使用。
1)搭建方法
Step1:安裝git
$ sudo apt-get install git
Step2:創建一個git用戶,來運行git服務
$ sudo adduser git
Step3:創建證書登錄
收集所有需要登錄的用戶的公鑰,也就是他們各自的id_rsa.pub
文件,將所有公鑰導入到/home/git/.ssh/authorized_keys
文件中,一行一個。
Step4:初始化Git倉庫
先選定一個目錄作為Git倉庫,假定為/srv/sample.git
,在/srv
目錄下輸入命令:
$ sudo git init --bare sample.git
Git就會創建一個裸倉庫,裸倉庫沒有工作區,因為這臺服務器上的Git倉庫純粹是用于共享,所以不讓用戶直接登錄到服務器上去修改工作區,并且服務器上的Git倉庫通常都以.git
結尾。然后,將owner改為git
:
$ sudo chown -R git:git sample.git
Step5:禁用shell登錄
出于安全考慮,第二步創建的git
用戶不允許登錄shell,這可以通過編輯/etc/passwd
文件完成。找到該文件中類似下面一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改為
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
這樣,git
用戶就可以正常通過ssh使用git,但無法登錄shell,因為我們為git
用戶指定的git-shell
每次一登錄就會自動退出。
Step6:clone遠程倉庫
$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
剩下的推送方法類似于推送到GitHub。
2)管理公鑰
如果團隊很小,可以利用上述方法管理。如果團隊較大,可以用Gitosis
來管理公鑰。