前言
在補習python的時候主要參考的是廖雪峰的教程Python教程,在學習完後準備完成期末作業時,遇到了一個技術難題,需要初步掌握git,是以開始了git的學習。
本教程參考廖雪峰的Git教程
Git簡介可以參看:Git簡介
Git學習筆記:版本復原 Git:版本復原
Git學習筆記:修改Git學習筆記:修改
Git學習筆記: 遠端倉庫Git學習筆記:遠端倉庫
Git學習筆記:分支管理1 Git學習筆記:分支管理1
Git學習筆記:分支管理2Git學習筆記:分支管理2
Git學習筆記:分支管理3Git學習筆記:分支管理3
Git學習筆記:标簽管理以及GItHubGit學習筆記:标簽管理以及GIthub
目錄
- 前言
- 目錄
- 自定義Git
- 忽略特殊檔案
- 小結
- 配置别名
- 配置檔案
- 管理公鑰
- 管理權限
- 小結
- 期末總結
自定義Git
在安裝Git一節中,我們已經配置了user.name和user.email,實際上,Git還有很多可配置項。
比如,讓Git顯示顔色,會讓指令輸出看起來更醒目:
這樣,Git會适當地顯示不同的顔色,比如git status指令:

檔案名就會标上顔色。
我們在後面還會介紹如何更好地配置Git,以便讓你的工作更高效。
忽略特殊檔案
有些時候,你必須把某些檔案放到Git工作目錄中,但又不能送出它們,比如儲存了資料庫密碼的配置檔案啦,等等,每次git status都會顯示Untracked files …,有強迫症的童鞋心裡肯定不爽。
好在Git考慮到了大家的感受,這個問題解決起來也很簡單,在Git工作區的根目錄下建立一個特殊的.gitignore檔案,然後把要忽略的檔案名填進去,Git就會自動忽略這些檔案。
不需要從頭寫.gitignore檔案,GitHub已經為我們準備了各種配置檔案,隻需要組合一下就可以使用了。所有配置檔案可以直接線上浏覽:https://github.com/github/gitignore
忽略檔案的原則是:
1.忽略作業系統自動生成的檔案,比如縮略圖等;
2.忽略編譯生成的中間檔案、可執行檔案等,也就是如果一個檔案是通過另一個檔案自動生成的,那自動生成的檔案就沒必要放進版本庫,比如Java編譯産生的.class檔案;
3.忽略你自己的帶有敏感資訊的配置檔案,比如存放密碼的配置檔案。
舉個例子:
假設你在Windows下進行Python開發,Windows會自動在有圖檔的目錄下生成隐藏的縮略圖檔案,如果有自定義目錄,目錄下就會有Desktop.ini檔案,是以你需要忽略Windows自動生成的垃圾檔案:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
然後,繼續忽略Python編譯産生的.pyc、.pyo、dist等檔案或目錄:
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
加上你自己定義的檔案,最終得到一個完整的.gitignore檔案,内容如下:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My ```
igurations:
db.ini
deploy_key_rsa
最後一步就是把.gitignore也送出到Git,就完成了!當然檢驗.gitignore的标準是git status指令是不是說working directory clean。
使用Windows的童鞋注意了,如果你在資料總管裡建立一個.gitignore檔案,它會非常弱智地提示你必須輸入檔案名,但是在文本編輯器裡“儲存”或者“另存為”就可以把檔案儲存為.gitignore了。
有些時候“`
$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.
如果你确實想添加該檔案,可以用-f強制添加到Git:
$ git add -f App.class
或者你發現,可能是.gitignore寫得有問題,需要找出來到底哪個規則寫錯了,可以用git check-ignore指令檢查:
$ git check-ignore -v App.class
.gitignore:3:*.class App.class
Git會告訴我們,.gitignore第3行規則忽略了該檔案,于是我們就可以知道應該修訂哪個規則。
小結
•. gitignore檔案本身要放到版本庫裡,并且可以對.gitignore做版本管理!gitignore;
•. gitignore檔案本身要放到版本庫裡,并且可以對.gitignore做版本管理
配置别名
沒有經常敲錯指令?比如git status?status這個單詞真心不好記。
如果敲git st就表示git status那就簡單多了,當然這種偷懶的辦法我們是極力贊成的。
我們隻需要敲一行指令,告訴Git,以後st就表示status:
$ git config --global alias.st status
好了,現在敲git st看看效果。
當然還有别的指令可以簡寫,很多人都用co表示checkout,ci表示commit,br表示branch:
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
以後送出就可以簡寫成:
–global參數是全局參數,也就是這些指令在這台電腦的所有Git倉庫下都有用。
在撤銷修改一節中,我們知道,指令git reset HEAD file可以把暫存區的修改撤銷掉(unstage),重新放回工作區。既然是一個unstage操作,就可以配置一個unstage别名:
當你敲入指令:
$ git unstage test.py
實際上Git執行的是:
$ git reset HEAD test.py
配置一個git last,讓其顯示最後一次送出資訊:
這樣,用git last就能顯示最近一次的送出:
$ git last
commit adca45d317e6d8a4b23f9811c3d7b7f0f180bfe2
Merge: bd6ae48 bea8
Author: Michael Liao <[email protected].com>
Date: Thu Aug :: +
merge & fix hello.py
甚至還有人喪心病狂地把lg配置成了:
來看看git lg的效果:
為什麼不早點告訴我?别激動,咱不是為了多記幾個英文單詞嘛!
配置檔案
配置Git的時候,加上–global是針對目前使用者起作用的,如果不加,那隻針對目前的倉庫起作用。
配置檔案放哪了?每個倉庫的Git配置檔案都放在.git/config檔案中:
$ cat .git/config
[core]
repositoryformatversion =
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://github.com/challengef/awesome-python3-webapp2.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
last = log -
别名就在[alias]後面,要删除别名,直接把對應的行删掉即可。
而目前使用者的Git配置檔案放在使用者主目錄下的一個隐藏檔案.gitconfig中:
$ cat .gitconfig
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email 個檔案,如果改錯了,可以删掉檔案重新通過指令配置。
##小結
給Git配置好别名,就可以輸入指令時偷個懶。我們鼓勵偷懶。
#搭建Git伺服器
在遠端倉庫一節中,我們講了遠端倉庫實際上和本地倉庫沒啥不同,純粹為了x24小時開機并交換大家的修改。
GitHub就是一個免費托管開源代碼的遠端倉庫。但是對于某些視源代碼如生命的商業公司來說,既不想公開源代碼,又舍不得給GitHub交保護費,那就隻能自己搭建一台Git伺服器作為私有倉庫使用。
搭建Git伺服器需要準備一台運作Linux的機器,強烈推薦用Ubuntu或Debian,這樣,通過幾條簡單的apt指令就可以完成安裝。
假設你已經有sudo權限的使用者賬号,下面,正式開始安裝。
第一步,安裝git:
$ sudo apt-get install git
第二步,建立一個git使用者,用來運作git服務:
$ sudo adduser git
第三步,建立證書登入:
收集所有需要登入的使用者的公鑰,就是他們自己的id_rsa.pub檔案,把所有公鑰導入到/home/git/.ssh/authorized_keys檔案裡,一行一個。
第四步,初始化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
第五步,禁用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每次一登入就自動退出。
第六步,克隆遠端倉庫:
現在,可以通過git clone指令克隆遠端倉庫了,在各自的電腦上運作:
$ git clone [email protected]:/srv/sample.git
Cloning into ‘sample’…
warning: You appear to have cloned an empty repository.
“`
剩下的推送就簡單了。
管理公鑰
如果團隊很小,把每個人的公鑰收集起來放到伺服器的/home/git/.ssh/authorized_keys檔案裡就是可行的。如果團隊有幾百号人,就沒法這麼玩了,這時,可以用Gitosis來管理公鑰。
這裡我們不介紹怎麼玩Gitosis了,幾百号人的團隊基本都在500強了,相信找個高水準的Linux管理者問題不大。
管理權限
有很多不但視源代碼如生命,而且視員工為竊賊的公司,會在版本控制系統裡設定一套完善的權限控制,每個人是否有讀寫權限會精确到每個分支甚至每個目錄下。因為Git是為Linux源代碼托管而開發的,是以Git也繼承了開源社群的精神,不支援權限控制。不過,因為Git支援鈎子(hook),是以,可以在伺服器端編寫一系列腳本來控制送出等操作,達到權限控制的目的。Gitolite就是這個工具。
這裡我們也不介紹Gitolite了,不要把有限的生命浪費到權限鬥争中。
小結
•搭建Git伺服器非常簡單,通常10分鐘即可完成;
•要友善管理公鑰,用Gitosis;
•要像SVN那樣變态地控制權限,用Gitolite。
期末總結
終于到了期末總結的時刻了!
經過幾天的學習,相信你對Git已經初步掌握。一開始,可能覺得Git上手比較困難,尤其是已經熟悉SVN的童鞋,沒關系,多操練幾次,就會越用越順手。
Git雖然極其強大,指令繁多,但常用的就那麼十來個,掌握好這十幾個常用指令,你已經可以得心應手地使用Git了。
友情附贈國外網友制作的Git Cheat Sheet,建議列印出來備用:
Git Cheat Sheet
現在告訴你Git的官方網站:http://git-scm.com,英文自我感覺不錯的童鞋,可以經常去官網看看。什麼,打不開網站?相信我,我給出的絕對是官網位址,而且,Git官網決沒有那麼容易當機,可能是你的人品問題,趕緊面壁思過,好好想想原因。
如果你學了Git後,工作效率大增,有更多的空閑時間健身看電影,那我的教學目标就達到了。
謝謝觀看!