git的安裝后的配置
添加配置信息
git config --global user.name "xxx"
git config --global user.email xxxxxxxxxxxxxxxxx //--global參數(shù)表示全局配置羽利,對本機每個git項目均起作用
查詢配置信息
gedit ~/.gitconfig
Git的使用
在需要的指定目錄添加庫:
git init //初始化一個空的庫
向倉庫中添加目錄
git add +目錄名 //所添加的目錄只能是在倉庫所在目錄的子目錄或根目錄中锭部,否則會提示fatal:'目錄' is outside repository
提交
git commit -m 'message'
不想寫更新信息止潮?或是出現(xiàn)Aborting commit due to empty message
?
git commit -a --allow-empty-message
管理遠程倉庫(轉(zhuǎn)載自Git 遠程倉庫的使用 - SelBoo's Blog 色蘿卜)
查看當(dāng)前的遠程庫
要查看當(dāng)前配置有哪些遠程倉庫脚作,可以用 git remote 命令惩阶,它會列出每個遠程庫的簡短名字括享。在克隆完某個項目后,至少可以看到一個名為 origin 的遠程庫硝训,Git 默認(rèn)使用這個名字來標(biāo)識你所克隆的原始倉庫:
git clone git://github.com/schacon/ticgit.git
Initialized empty Git repository in /private/tmp/ticgit/.git/
remote: Counting objects: 595, done.
remote: Compressing objects: 100% (269/269), done.
remote: Total 595 (delta 255), reused 589 (delta 253)
Receiving objects: 100% (595/595), 73.31 KiB | 1 KiB/s, done.
Resolving deltas: 100% (255/255), done.
cd ticgit
git remote
origin
也可以加上 -v
選項(譯注:此為 –verbose 的簡寫响委,取首字母),顯示對應(yīng)的克隆地址:
$ git remote -v
origin git://github.com/schacon/ticgit.git
如果有多個遠程倉庫窖梁,此命令將全部列出赘风。比如在我的 Grit 項目中,可以看到:
$ cd grit
$ git remote -v
bakkdoor git://github.com/bakkdoor/grit.git
cho45 git://github.com/cho45/grit.git
defunkt git://github.com/defunkt/grit.git
koke git://github.com/koke/grit.git
origin git@github.com:mojombo/grit.git
這樣一來纵刘,我就可以非常輕松地從這些用戶的倉庫中邀窃,拉取他們的提交到本地。請注意假哎,上面列出的地址只有 origin 用的是 SSH URL 鏈接蛔翅,所以也只有這個倉庫我能推送數(shù)據(jù)上去,因為 ssh 中包含了與賬戶相關(guān)的密鑰位谋。
添加遠程倉庫
要添加一個新的遠程倉庫山析,可以指定一個簡單的名字,以便將來引用掏父,運行 git remote add [shortname] [url]
:
git remote
origin
git remote add pb git://github.com/paulboone/ticgit.git
git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git
現(xiàn)在可以用字串 pb 指代對應(yīng)的倉庫地址了笋轨。比如說,要抓取所有 Paul 有的,但本地倉庫沒有的信息爵政,可以運行 git fetch pb
:
git fetch pb
remote: Counting objects: 58, done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 44 (delta 24), reused 1 (delta 0)
Unpacking objects: 100% (44/44), done.
From git://github.com/paulboone/ticgit
* [new branch] master -pb/master
* [new branch] ticgit -pb/ticgit
現(xiàn)在仅讽,Paul 的主干分支(master)已經(jīng)完全可以在本地訪問了,對應(yīng)的名字是 pb/master钾挟,你可以將它合并到自己的某個分支洁灵,或者切換到這個分支,看看有些什么有趣的更新掺出。
從遠程倉庫抓取數(shù)據(jù)
正如之前所看到的徽千,可以用下面的命令從遠程倉庫抓取數(shù)據(jù)到本地:
git fetch [remote-name]
此命令會到遠程倉庫中拉取所有你本地倉庫中還沒有的數(shù)據(jù)。運行完成后汤锨,你就可以在本地訪問該遠程倉庫中的所有分支双抽,將其中某個分支合并到本地,或者只是取出某個分支闲礼,一探究竟牍汹。(我們會在第三章詳細討論關(guān)于分支的概念和操作。)
如果是克隆了一個倉庫柬泽,此命令會自動將遠程倉庫歸于 origin 名下慎菲。所以,git fetch origin 會抓取從你上次克隆以來別人上傳到此遠程倉庫中的所有更新(或是上次 fetch 以來別人提交的更新)锨并。有一點很重要露该,需要記住,fetch 命令只是將遠端的數(shù)據(jù)拉到本地倉庫琳疏,并不自動合并到當(dāng)前工作分支有决,只有當(dāng)你確實準(zhǔn)備好了闸拿,才能手工合并空盼。(說 明:事先需要創(chuàng)建好遠程的倉庫,然后執(zhí)行:git remote add [倉庫名] [倉庫url]新荤,git fetch [遠程倉庫名]揽趾,即可抓取到遠程倉庫數(shù)據(jù)到本地,再用git merge remotes/[倉庫名]/master就可以將遠程倉庫merge到本地當(dāng)前branch苛骨。這種分支方式比較適合獨立-整合開發(fā)篱瞎,即各自開發(fā)測試好后 再整合在一起。比如痒芝,Android的Framework和AP開發(fā)俐筋。
可以使用--bare 選項運行g(shù)it init 來設(shè)定一個空倉庫,這會初始化一個不包含工作目錄的倉庫严衬。
cd /opt/git
mkdir project.git
cd project.git
git --bare init
這時澄者,Join,Josie 或者Jessica 就可以把它加為遠程倉庫,推送一個分支粱挡,從而把第一個版本的工程上傳到倉庫里了赠幕。)
如果設(shè)置了某個分支用于跟蹤某個遠端倉庫的分支(參見下節(jié)及第三章的內(nèi)容),可以使用 git pull 命令自動抓取數(shù)據(jù)下來询筏,然后將遠端分支自動合并到本地倉庫中當(dāng)前分支榕堰。在日常工作中我們經(jīng)常這么用,既快且好嫌套。實際上逆屡,默認(rèn)情況下 git clone 命令本質(zhì)上就是自動創(chuàng)建了本地的 master 分支用于跟蹤遠程倉庫中的 master 分支(假設(shè)遠程倉庫確實有 master 分支)。所以一般我們運行 git pull
灌危,目的都是要從原始克隆的遠端倉庫中抓取數(shù)據(jù)后康二,合并到工作目錄中當(dāng)前分支。
推送數(shù)據(jù)到遠程倉庫
項目進行到一個階段勇蝙,要同別人分享目前的成果沫勿,可以將本地倉庫中的數(shù)據(jù)推送到遠程倉庫。實現(xiàn)這個任務(wù)的命令很簡單: git push [remote-name] [branch-name]
味混。如果要把本地的 master 分支推送到 origin 服務(wù)器上(再次說明下产雹,克隆操作會自動使用默認(rèn)的 master 和 origin 名字),可以運行下面的命令:
git push origin master
只有在所克隆的服務(wù)器上有寫權(quán)限翁锡,或者同一時刻沒有其他人在推數(shù)據(jù)蔓挖,這條命令才會如期完成任務(wù)。如果在你推數(shù)據(jù)前馆衔,已經(jīng)有其他人推送了若干更新瘟判,那 你的推送操作就會被駁回。你必須先把他們的更新抓取到本地角溃,并到自己的項目中拷获,然后才可以再次推送。
查看遠程倉庫信息
我們可以通過命令 git remote show [remote-name]
查看某個遠程倉庫的詳細信息减细,比如要看所克隆的origin 倉庫匆瓜,可以運行:
git remote show origin
remote origin
URL: git://github.com/schacon/ticgit.git
Remote branch merged with 'git pull' while on branch master
master
Tracked remote branches
master
ticgit
remote origin
除了對應(yīng)的克隆地址外,它還給出了許多額外的信息未蝌。它友善地告訴你如果是在 master 分支驮吱,就可以用git pull 命令抓取數(shù)據(jù)合并到本地。另外還列出了所有處于跟蹤狀態(tài)中的遠端分支萧吠。
實際使用過程中左冬,git remote show 給出的信息可能會像這樣:
git remote show origin
remote origin
URL: git@github.com:defunkt/github.git
Remote branch merged with 'git pull' while on branch issues
issues
Remote branch merged with 'git pull' while on branch master
master
New remote branches (next fetch will store in remotes/origin)
caching
Stale tracking branches (use 'git remote prune')
libwalker
walker2
Tracked remote branches
acl
apiv2
dashboard2
issues
master
postgres
Local branch pushed with 'git push'
master:master
它告訴我們,運行 git push 時缺省推送的分支是什么(譯注:最后兩行)纸型。它還顯示了有哪些遠端分支還沒有同步 到本地(譯注:第六行的 caching 分支)拇砰,哪些已同步到本地的遠端分支在遠端服務(wù)器上已被刪除(譯注:Stale tracking branches 下面的兩個分支)九昧,以及運行 git pull 時將自動合并哪些分支(譯注:前四行中列出的 issues 和 master 分支)。(此命令也可以查看到本地分支和遠程倉庫分支的對應(yīng)關(guān)系毕匀。)
遠程倉庫的刪除和重命名
在新版 Git 中可以用 git remote rename 命令修改某個遠程倉庫的簡短名稱铸鹰,比如想把 pb 改成 paul,可以這么運行:
git remote rename pb paul
git remote
origin
paul
注意皂岔,對遠程倉庫的重命名蹋笼,也會使對應(yīng)的分支名稱發(fā)生變化,原來的 pb/master 分支現(xiàn)在成了paul/master躁垛。
碰到遠端倉庫服務(wù)器遷移剖毯,或者原來的克隆鏡像不再使用,又或者某個參與者不再貢獻代碼教馆,那么需要移除對應(yīng)的遠端倉庫逊谋,可以運行 git remote rm
命令:
git remote rm paul
git remote
origin
刪除倉庫中的某個文件或目錄
git rm --cache -r +目錄名 //--cache保證只會刪除遠程倉庫里的目錄,而不會影響本機的物理目錄土铺,-r是指遞歸刪除
關(guān)于permission denied的問題
這個問題貌似是只出現(xiàn)在在一臺機器上第一次登錄某一帳號時才會出現(xiàn)胶滋,需要添加ssh key,具體做法是:
先嘗試這個命令:
ssh -T git@github.com
如若未出現(xiàn)“.........success.....”字眼悲敷,則說明沒有ssh key究恤,進入~/.ssh目錄下,鍵入:
ssh -keygen
一路回車后德,最后把id_rsa.pub.file 復(fù)制粘貼到github帳號的new ssh就Ok了!
其他錯誤
如果出現(xiàn)did you run git update-server-info on the server?
或者 error: The requested URL returned error: 403 while accessing
修改~/.gitconfig
添加
[remote "origin"]
url = https://github.com/yourproject.git