遠程庫操作
1.提交到遠程庫
$ git push username@ipaddr: 遠端repository名(目錄/URL) 本地分支名:遠端分支名
這條命令將本地git庫的一個本地分支push到遠端git庫的遠端分支中
或
$ git push origin master
orign 為默認遠程分支
master 為默認本地分支
可手動指定,也可在gitconfig中指定遠程配置卢鹦,即可直接使用git push
2.獲取更新
get fetch & git merge
git fetch [remote-name] 從遠程倉庫中拉取所有你本地倉庫還沒有的數(shù)據(jù)署隘。需要記住,fetch命令指示將遠端的數(shù)據(jù)拉到本地倉庫饺窿,并不自動合并到當前工作分支鲫咽,只有當你確實準備好了姨伤,才能通過執(zhí)行g(shù)it merge命令合并。git pull(= git fetch + git merge)
git pull命令相當于git fetch + git merge,即從遠程倉庫中拉取所有你本地倉庫中還沒有的數(shù)據(jù)贩幻,并自動合并到當前工作分支轿腺。
與git clone不同两嘴, git pull可以從任意一個git庫獲取某個分支的內(nèi)容。用法如下:
git-pull username@ipaddr: 遠端repository名 遠端分支名:本地分支名族壳。
這條命令將從遠端git庫的遠端分支名獲取到本地git庫的一個本地分支中憔辫。其中,如果不寫本地分支名仿荆,則默認pull到本地當前分支贰您。
需要注意的是,git-pull也可以用來合并分支拢操。 和git-merge的作用相同锦亦。 因此,如果你的本地分支已經(jīng)有內(nèi)容令境,則git-pull會合并這些文件杠园,如果有沖突會報警。
3.clone一個遠程項目
linux內(nèi)核源代碼
當我們打開它的網(wǎng)站時舔庶,發(fā)現(xiàn)有如下面的一段提示:URL
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
URL下面的三行字符串表示三個地址抛蚁,我們可以通過這三個地址得到同樣的一份Linux內(nèi)核源代碼。
也就是說下面這三條命令最終得到的是同一份源代碼:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
git clone http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
git cone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
URL
git://栖茉、http://篮绿、https://這些代表是傳輸git倉庫的協(xié)議形式,而“git.kernel.org“則代表了Git倉庫存儲的服務(wù)器名字(域名)吕漂,“/pub/scm/linux/kernel/git/torvalds/linux-2.6.git” 則代表了Git倉庫在服務(wù)器上位置。
Git 倉庫除了可以通過上面的git尘应、http惶凝、https協(xié)議傳輸外還可以通過ssh、ftp(s)犬钢、rsync等協(xié)議來傳輸苍鲜。git clone的本質(zhì)就是把“Git目錄”里面的內(nèi)容拷貝過來,大家想想看玷犹,一般的“Git目錄”里有成千上萬的各種對象(提交對象混滔,樹對象,二進制對象......)歹颓,如果逐一復制的話坯屿,其效率就可想而知。
如果通過git巍扛、ssh協(xié)議傳輸领跛,服務(wù)器端會在傳輸前把需要傳輸?shù)母鞣N對象先打好包再進行傳輸;而http(s)協(xié)議則會反復請求要傳輸?shù)牟煌瑢ο蟆H绻麄}庫里面的提交不多的話撤奸,前者和后者的效率相差不多;但是若倉庫里有很多提交的話吠昭,git喊括、ssh協(xié)議進行傳輸則會更有效率。
現(xiàn)在我們執(zhí)行了下面這條命令矢棚,把linux-2.6的最新版源代碼clone下來:
$cd ~/
$mkdir temp
$git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Initialized empty Git repository in /home/liuhui/temp/linux-2.6/.git/
remote: Counting objects: 1889189, done.
remote: Compressing objects: 100% (303141/303141), done.
Receiving objects: 100% (1889189/1889189), 385.03 MiB | 1.64 MiB/s, done.
remote: Total 1889189 (delta 1570491), reused 1887756 (delta 1569178)
Resolving deltas: 100% (1570491/1570491), done.
Checking out files: 100% (35867/35867), done.
當我們執(zhí)行了“git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git”這條命令后大家可以看到這條輸出:
Initialized empty Git repository in /home/user/temp/linux-2.6/.git/
這就是意味著我們在本地先建了一個“l(fā)inux-2.6”目錄郑什,然后在這個目錄建了一個空的Git本地倉庫(Git目錄);里面將會存儲從網(wǎng)上拉下來的歷史提交。
下面兩條輸入代表服務(wù)器現(xiàn)在調(diào)用 git-pack-objects 對它的倉庫進行打包和壓縮:
remote: Counting objects: 1888686, done.
remote: Compressing objects: 100% (302932/302932), done.
然后客戶端接收服務(wù)器端發(fā)過送過來的數(shù)據(jù):
Receiving objects: 100% (1889189/1889189), 385.03 MiB | 1.64 MiB/s, done.
在我們執(zhí)行完上面的clone linux-2.6代碼的的操作后蒲肋,Git會從“Git目錄”里把最新的代碼到簽出(checkout)到“l(fā)inux-2.6”這個目錄里面蹦误。我們一般把本地的“l(fā)inux-2.6”這個目錄叫做”工作目錄“(work directory),它里面保存著你從其它地方clone(or checkout)過來的代碼肉津。當你在項目的不同分支間切換時强胰,“工作目錄”中的文件可能會被替換或者刪除;“工作目錄”只是保存著當前的工作,你可以修改里面文件的內(nèi)容直到下次提交為止妹沙。
4.庫的逆轉(zhuǎn)與恢復
Git-reset的概念比較復雜墩剖。它的命令形式:
git-reset [--mixed | --soft | --hard] [<commit-ish>]
命令的選項:
--mixed 這個是默認的選項。 如git-reset [--mixed] dev1(dev1的定義可以參見2.6.5)炮温。它的作用僅是重置分支狀態(tài)到dev1^, 但是卻不改變?nèi)魏喂ぷ魑募膬?nèi)容垒迂。即,從dev1到dev1的所有文件變化都保留了悍引,但是dev1到dev1之間的所有commit日志都被清除了恩脂,而且,發(fā)生變化的文件內(nèi)容也沒有通過git-add標識趣斤,如果您要重新commit俩块,還需要對變化的文件做一次git-add。 這樣浓领,commit后玉凯,就得到了一份非常干凈的提交記錄。
--soft 相當于做了git-reset –mixed联贩,后漫仆,又對變化的文件做了git-add。如果用了該選項泪幌, 就可以直接commit了盲厌。
--hard 這個命令就會導致所有信息的回退, 包括文件內(nèi)容祸泪。 一般只有在重置廢棄代碼時吗浩,才用它。 執(zhí)行后浴滴,文件內(nèi)容也無法恢復回來了拓萌。
上一篇:Git基本操作(五)
下一篇:Git基本操作(七)