使用git管理github项目
http://progit.org/book/zh/
?
Git是一個分布式的版本控制系統,最初由Linus Torvalds編寫,用作Linux內核代碼的管理。在推出后,Git在其它項目中也取得了很大成功,尤其是在Ruby社區中。目前,包括Rubinius和Merb在內的很多知名項目都使用了Git。Git同樣可以被諸如Capistrano和Vlad the Deployer這樣的部署工具所使用。
目前大部分的版本控制都需要一個服務器端,commit時提交到服務器端。git雖然是分布式的管理工具,但它也可以使用集中管理的方式。舉例來說,billy創建了一個新項目,tom覺得這個項目比較有意思,他想玩玩看,他可以把整個repo(reoisitories)都clone到本地,并且在他clone下來的項目中自己有一個repo。tom可以自由的對這個repo做各種提交修改,直到他滿意為止。這時tom可以告訴billy,他改了一些什么,若billy覺得不錯,可以從tom那邊fetch并merge到本地。
如前所述,作為一個分布式的版本控制系統,在Git中并不存在主庫這樣的概念,每一份復制出的庫都可以獨立使用,任何兩個庫之間的不一致之處都可以進行合并。正因為如此,所以有了Github這個網站,github是基于ruby的并揉合多種語言進行開發的,上面的ruby項目也非?;钴S。在github 中,每個人都可以有多個repo,這些repo都是與用戶綁定在一起的。user之間可以互相clone repo、fork repo、watch repo或是 follow其他user,就好像twitter或是plurk等社交網站一樣。
不過若使用免費的github則所有的repo都要是public且有300M容量的限制。若希望有private的repo,則需要跟付費才可。github另外還有剪貼簿的功能,可將代碼貼到其中并自由的發展各種branch。
GitHub可以托管各種git庫,并提供一個web界面,但與其它像 SourceForge或Google Code這樣的服務不同,GitHub的獨特賣點在于從另外一個項目進行分支的簡易性。為一個項目貢獻代碼非常簡單:首先點擊項目站點的“fork”的按 鈕,然后將代碼檢出并將修改加入到剛才分出的代碼庫中,最后通過內建的“pull request”機制向項目負責人申請代碼合并。已經有人將GitHub稱為代碼玩家的MySpace:
在GitHub進行分支就像在Myspace(或Facebook [...])進行交友一樣,在社會關系圖的節點中不斷的連線。GitHub項目本身自然而然的也在GitHub上就行托管,只不過在一個私有的,公共視圖不可見的庫中。開源項目可以免費托管,但私有庫則并不如此。Chris Wanstrath,GitHub的開發者之一,肯定了通過付費的私有庫來在財務上支持免費庫的托管這一計劃。
是的,我們正是這么計劃的。通過與客戶的接洽,開發FamSpam,甚至是開發GitHub本身,GitHub的私有 庫已經被證明了物有所值。任何希望節省時間并希望和團隊其它成員一樣遠離頁面頻繁轉換之苦的人士都會從 GitHub中獲得他們真正想要的價值。Chris Wanstrath還向InfoQ分享了關于GitHub的一些內幕信息:
GitHub主要用Rails實現。我們目前在進行的post-commit集成小應用完全使用Merb編寫。我們使用了 Python的Pygments來做格式高亮顯示,另外還用了Ara T. Howard's Bj加上一些Ruby腳本來做我們的排隊 系統。當然,我們用了Ruby Grit庫來和Git進行交互。GitHub已經有了一組引人注目的特性,除了命令式的庫瀏覽器和一個項目Wik,GitHub甚至還包括了一個GitHub gem,以使通過shell方式使用GitHub更為方便。更多的未來特性已經在計劃中:
許多人都希望能有一個條目系統,因此一個簡單的條目系統已經在開發中。此外,正如我前面所言,我們尚在 進行RubyGems服務器和一些之前留出的post-commit鉤子方面的工作。如果你不能或就是不想托管一個你 自己的守護進程,你可以使用我們所提供的。我們還在開發一些特性來幫助公司在使用Github時可以停留在sync之上。最后,我們也在進行API發布方面的工作。我們很快就會發布一些只讀性的API,隨后是一些很強大的“寫”集 成。你可以使用API將新的事件發布到新聞feed中,發消息和做其他許多很酷的事情。更多關于GitHub的信息可以參見GitHub官方網站或GitHub博客。目前通過GitHub進行代碼管理的開源項目列表也已經可以查閱。
下面先來介紹如何將環境配置好:配置環境分為三個步驟,安裝與設置git,安裝與設置ssh-key,以及在github上注冊并建立repo。
Linux:只要用yum,apt-get等安裝即可,或是下載之后編譯安裝。
Mac OS X:從這里下載并安裝。
Windows:先安裝putty,然后從這里下載并安裝。
git使用ssh tunnel來提交源碼,這個加密通道可以避免源碼的封包被攔截而截取。因此要先產生并上傳ssh key到github,方便之後與服務器之間的通迅。
Mac OS X與Linux,只要輸入ssh-keygen -t rsa并根據指示操作即可:
?
[~/.ssh]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/tom/.ssh/id_rsa): <enter> Enter passphrase (empty for no passphrase): <輸入key的密碼,或直接按下enter使用空密碼> Enter same passphrase again: <再輸入一次密碼> Your identification has been saved in /home/tom/.ssh/id_rsa. Your public key has been saved in /home/tom/.ssh/id_rsa.pub. The key fingerprint is: 50:43:77:c6:97:af:61:82:dc:ea:9b:6b:67:d4:1b:61 tom@volcano其中id_rsa.pub是公鑰,而id_rsa則是私鑰,請妥善保存以免遺失,它們都存放于~/.ssh目錄中。將公鑰粘貼到你github帳號中的SSH Public Keys的位置。注意小心不要復制到空格。
Windows,執行git-bash并輸入:
ssh-keygen -C “username@email.com” -t rsa在github你的帳號右上角可以看到一個Your Repositories,選擇Create one。輸入Project name后,可以看到它有教你如何創建一個新的項目。
?
這里以一個名為test的項目為例:
# Global setup:# Download and install Git git config --global user.email <your email> git config --global user.name <your name># Next steps: mkdir test # cd test git init # github會自動讀取你的README內容并顯示在項目簡介中,因此先創建README touch README # 將README加到index中 git add README # 提交到版本庫中 git commit -m 'first commit' # 把github的repo加入為遠程的repo git remote add origin git@github.com:<你的ID>/test.git # 把目前的commit狀態push并同步到github上面 git push origin master# Existing Git Repo? cd existing_git_repo git remote add origin git@github.com:<你的ID>/test.git git push origin master把你的程序push上github后就可以有自己的repo了。
若您喜歡別人的repo,只要他是public的,就可以點擊上面的fork,把整個repo復制到你的帳戶底下并修改提交后再請求原作者進行pull。
若你fork了一個repo(名為test)到github中之后,只要輸入:
git clone git@github.com:<ID>/test.git test就可以將整個repo復制下來并存放在test目錄中。若你的ssh key有加上密碼保護,每次與github通信的過程中都需要輸入密碼以存取ssh key。
git的簡單使用:
# 創建一個版本庫 git init # 每次修改好了后,可以先將修改存入stage(快照/索引)中 git add <modified files> # 修改了大量文件則使用下面這個命令批量存入 git add . # 使用commit將快照/索引中的內容提交到版本庫中 git commit -m "msg" # 也可以將git add與git commit用一個指令完成 git commit -a -m "msg" # 將本地的git檔案與github(遠程)上的同步 git push # 將github(遠程)的git檔案與本地的同步(即更新本地端的repo) git pull # 例如,pull指令其實包含了fetch(將變更復制回來)以及merge(合并)操作 git pull git://github.com/tom/test.git# 另外版本控制系統的branch功能也很有意思,若同時修改bug,又要加入新功能,可以fork出一個branch:一個專門修bug,一個專門加入新功能,等到穩定后再merge合并 git branch bug_fix # 建立branch,名為bug_fix git checkout bug_fix # 切換到bug_fix git checkout master #切換到主要的repo git merge bug_fix #把bug_fix這個branch和現在的branch合并# 若有remote的branch,想要查看并checkout git branch -r # 查看遠程branch git checkout -b bug_fix_local bug_fix_remote #把本地端切換為遠程的bug_fix_remote branch并命名為bug_fix_local# 還有其它可以查看repo狀態的工具 git log #可以查看每次commit的改變 git diff #可以查看最近一次改變的內容,加上參數可以看其它的改變并互相比較 git show #可以看某次的變更# 若想知道目前工作樹的狀態,可以輸入 git status轉載于:https://www.cnblogs.com/yuzaipiaofei/archive/2012/03/03/4124253.html
總結
以上是生活随笔為你收集整理的使用git管理github项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发工程师的职场人生路(转)
- 下一篇: wp7后台文件传输之-----Backg