<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    Git 歷險(一)

    Posted on 2011-05-10 14:30 幻海藍夢 閱讀(693) 評論(0)  編輯  收藏 所屬分類: 版本管理

    【編者按】作為分布式版本控制系統的重要代表——Git已經為越來越多的人所認識,它相對于我們熟悉的CVS、SVN甚至同時分布式控制系統的 Mercurial,有哪些優勢和不足呢。這次InfoQ中文站有幸邀請到《Git Community Book》的譯者劉輝,在InfoQ開辟《Git歷險記》專欄,分享他使用Git的經驗,以及他對Git的看法。


    Git是Linus.Torvald為了管理Linux內核發起并開發的一個開源分布式版本控件系統(DVCS)。從2002年起,Linux 內核一直使用BitKeeper來進行版本管理,但是在2005年BitKeeper和Linux 內核開源社區的合作關系結束,BitKeeper再也不能免費使用了,這迫使Linus決定開發一個開源界自已的版本控制系統。

    傳統的SVN、CVS 等版本控制系統,只有一個倉庫(repository),用戶必須要連上這個倉庫才能開始提交;而Git之類的分布式版本控制系統(當然也還包括 BitKeeper、Mercurial等 等),它的每個工作目錄都包含一個完整的倉庫,它們可以支持離線工作,先把工作提交到本地倉庫后再提交上遠程的服務器上的倉庫里。分布式的處理也讓開發更 為便捷,開發人員可以很方便的在本地創建分支來進行日常開發,每個人的本地倉庫都是平等且獨立,不會因為你的本地提交而直接影響別人。

    老實說,Git的速度是我用的版本控制系統中最快的(SVN Mercurial Git)。我這里說的速度,包括本地提交(commit)、本地簽出(checkout)、提交到遠程倉庫(git push)和從遠程倉庫獲取(git fetch ,git pull);它的本地操作速度和本地文件系統在一個級別,遠程倉庫的操作速度和SFTP文件傳輸在一個級別。這當然和Git的內部實現機制有關,這里就不 多展開了,有興趣的朋友可以看一下這里:Git is the next Unix

    我們在學一門新的語言時,往往是從一個“hello world” 程序開始的,那么Git歷程也就從一個“hello Git”開始吧。

    在這里假設各位同學的電腦都裝好了Git,如果沒有裝好,可以先看一下這里(安裝Git)。當然,后面的章節我會專門講安裝可能會碰到的問題。

    我們首先打開Git的命令行:windows下是點擊“Git Bash 快捷方式”;Linux或是Unix like平臺的話就直接打開命令行界面就可以了。

    備注:$符號后面的字符串代表的是命令行輸入;命令行輸入后的以#開始的黑體字符串代表注釋;其它的部分則是命令行輸出。

    我們先用建一個倉庫吧:

    $mkdir testGit #建立倉庫目錄



    $cd testGit #進入倉庫目錄



    $git init #這會在當前的目錄下建一個倉庫



    Initialized empty Git repository in e:/doc/Git/test/testGit/.git/



    好的,前面的三行命令就建立了一個本地的Git倉庫。這個倉庫現在是一個空的倉庫。

    我們在命令行下執行:

    $ git status #查看當前倉庫的狀態



    # On branch master (在master分支上)



    #



    # Initial commit



    #



    nothing to commit (create/copy files and use "git add" to track)



    (現在沒有任何臺被提交的文件,復制或創建新的文件,再用”git add” 命令添加到暫存區中)



    $ git log #查看當前倉庫的歷史日志



    fatal: bad default revision 'HEAD'



    (由于倉庫里沒有任提交在里面,所以它會報這個錯。BTW: 這種提示是不是有點不友好呀:) )



    現在就讓我們在這個倉庫里添加點內容吧。

    $ echo “hello Git” > readme.txt #建立一個含有 hello Git 的文本文件



    $ git add readme.txt #將readme.txt添加到暫存區



    $ git status #查看當前倉庫的狀態



    # On branch master



    #



    # Initial commit



    #



    # Changes to be committed:(暫存里下次將被提交的修改)



    # (use "git rm --cached <file>..." to unstage)



    #



    # new file: readme.txt



    #



    好的,文件即然被暫存到暫存區中,我們現在就可以把它提交到倉庫里面去:)

    $ git commit -m "project init" #將剛才的修改提交到本地倉庫中 



    [master (root-commit) 8223db3] project init



    1 files changed, 1 insertions(+), 0 deletions(-)



    create mode 100644 readme.txt



    $ git status



    # On branch master



    nothing to commit (working directory clean)



    (現在這個工作目錄里沒有什么要提交的東東,它是整潔的)



    現在你執行一下git log 命令就會看到剛才的提交記錄

    $ git log 



    commit 8223db3b064a9826375041c8fea020cb2e3b17d1



    Author: liuhui998 <liuhui998@gmail.com>



    Date: Sat Jan 1 18:12:38 2011 +0800



    project init



    “8223db3b064a9826375041c8fea020cb2e3b17d1”這一串字符就是我們這次創建的提交的名字。看起來是不是很 熟,如果經常用電驢的朋友就會發現它就是和電驢里內容標識符一樣,都是SHA1串。Git通過對提交內容進行 SHA1 Hash運算,得到它們的SHA1串值,作為每個提交的唯一標識。根據一般的密碼學原理來說,如果兩個提交的內容不相同,那么它們的名字就不會相同;反 之,如果它們的名字相同,就意味著它們的內容也相同。

    現在我想改一下倉庫里文件的內容,現提交到倉庫中去

    $ echo "Git is Cool" >> readme.txt #在文件的最后添加一行 



    $ git status #查看當前倉庫的狀態



    # On branch master



    # Changed but not updated: (修改了,但是還沒有暫存的內容)



    # (use "git add <file>..." to update what will be committed)



    # (use "git checkout -- <file>..." to discard changes in working directory)



    #



    # modified: readme.txt



    #



    no changes added to commit (use "git add" and/or "git commit -a")



    (沒有修改可以被提交,使用 “git add” 命令添加文件到暫存區,或是使用“git commit -a” 命令強制提交當前目錄下的所有文件)




    OK,即然我們修改了倉庫里被提交的文件,那么我想看一下我們

    到底改了哪些地方,再決定是否提交。

    $ git diff #查看倉庫里未暫存內容和倉庫已提交內容的差異 



    diff --git a/readme.txt b/readme.txt



    index 7b5bbd9..49ec0d6 100644



    --- a/readme.txt



    +++ b/readme.txt



    @@ -1 +1,2 @@



    hello Git



    +Git is Cool



    很好,正如我們所愿,我們只是在readme.txt的最后一行添加了一行“Git is Cool”。

    好的,我們現在再把 readme.txt放到暫存區里:

    $ git add readme.txt 

    我們現在看一下倉庫的狀態:

    $ git status 



    # On branch master



    # Changes to be committed:



    # (use "git reset HEAD <file>..." to unstage)



    #



    # modified: readme.txt



    #



    可以提交了:

    $ git commit -m "Git is Cool" 



    [master 45ff891] Git is Cool



    1 files changed, 1 insertions(+), 0 deletions(-)



    (一個文件被修改,一行插入,零行刪除)



    再看一下新的日志:

    $ git log 



    commit 45ff89198f08365bff32364034aed98126009e44



    Author: liuhui998 <liuhui998@gmail.com>



    Date: Sat Jan 1 18:17:07 2011 +0800



    Git is Cool



    commit 8223db3b064a9826375041c8fea020cb2e3b17d1



    Author: liuhui998 <liuhui998@gmail.com>



    Date: Sat Jan 1 18:12:38 2011 +0800







    project init



    “45ff89198f08365bff32364034aed98126009e44” 這個就是我們剛才提交修改時創建的提交。

    大家這么一路看過來,是不是有點糊涂了。不過沒有關系,如果你的電腦裝了Git,那么你把上面的這些命令全部執行一下遍就會對它有感性的認識了。

    下面的的章節,我會講一下如何在windows和Linux安裝配置Git,以及需要注意的問題:)


    原文:http://www.infoq.com/cn/news/2011/01/git-adventures-1

    http://www.infoq.com/cn/git-adventures(Git )

    主站蜘蛛池模板: 另类免费视频一区二区在线观看| 亚洲精品中文字幕乱码| 亚洲国产精品成人AV在线| 97人妻无码一区二区精品免费| 亚洲精品综合一二三区在线| 国产成人一区二区三区视频免费| 亚洲AV午夜成人片| 久久久久国产精品免费看| 亚洲国产综合91精品麻豆| 最近中文字幕mv免费高清视频8 | 亚洲午夜福利精品无码| 一二三四在线观看免费高清中文在线观看| 亚洲AV无码国产丝袜在线观看| 国产精品区免费视频| 亚洲性色高清完整版在线观看| 亚洲人成网站免费播放| 国产精品亚洲一区二区在线观看| 亚洲 综合 国产 欧洲 丝袜| 最近免费中文字幕中文高清| 亚洲国产成人精品不卡青青草原| 日本免费xxxx色视频| 亚洲性无码一区二区三区| 免费人成网站7777视频| 在线免费视频你懂的| 亚洲精品美女在线观看| 国产成人精品高清免费| 中国极品美軳免费观看| 亚洲电影一区二区三区| 免费电视剧在线观看| 国产免费高清69式视频在线观看| 亚洲AV无码国产丝袜在线观看 | 亚洲国产成人久久一区WWW| 中文字幕成人免费高清在线视频| 亚洲精品私拍国产福利在线| 男男AV纯肉无码免费播放无码| 深夜特黄a级毛片免费播放| 亚洲精品成人av在线| 青青青青青青久久久免费观看| 国产免费一区二区三区免费视频| 亚洲一区在线免费观看| 亚洲国产人成中文幕一级二级|