在GitHub上分享和展現你的代碼2011-10-14 22:34jquery
最近大愛Web編程,因而尋找各類代碼中,而後就發現了GitHub這個網站,若是你知道Google Code,那麼你就知道這個GitHub是作什麼的了。不過GitHub主要是用做基於Git的分佈式版本管理系統的庫,能夠保存和管理本身的代碼,並且主要用做代碼的合做開發。不過對於我來講,Git控制系統還比較難以掌握,或者開發小系統還不太用得着,所以我把GitHub看成分享和展現代碼的網站。git
註冊GitHub後你就會有0.3G的免費空間,不過只能建立公開項目,這也知足代碼分享的目的,我最喜歡的卻是它的代碼展現方式,能夠直接瀏覽你的代碼,代碼是通過高亮、添加行號處理過的,十分漂亮,體驗一流,好比這個Webpy託管的地方。而做爲想要了解你代碼的人,能夠選擇直接在線瀏覽本身感興趣的,也能夠直接下載壓縮包,或者直接使用Git clone到本地。github
由於GitHub是基於Git版本控制系統,因此你上傳修改代碼什麼的,都須要使用Git工具。我這裏主要是用來分享和展現代碼,因此不想在版本控制方面作過多的闡述,下面就簡單講解一下怎麼在GitHub上新建一個項目,還有把本身的代碼傳上去。下面的前提是你已經註冊了GitHub和下載安裝了Git——Git下載、Windows版本下載。web
上傳分享代碼編程
1.在GitHub上創建項目app
登陸GitHub後,你能夠在右邊靠中那裏找到一個按鈕「New Repository」,點擊事後,填入項目名稱、說明和網址事後就能夠建立了,而後會出現一個提示頁面,記下相似git@github.com:XXX/XXX.git的地址,這個就是你這個項目的地址了。ssh
2.配置Git以及上傳代碼webapp
安裝Git成功後,若是是Windows下,選擇Git Bash,在命令行中完成一切,可能開始有點麻煩,不過就那幾條命令行,用幾回就記住啦。首先初始設置Git:編輯器
1 git config --global user.name "Your Real Name"
2 git config --global user.email you@email.address分佈式
而後開始進行最麻煩的一步了,你須要上傳文件到GitHub的Git系統上,得須要一個SSH密匙來認證,下面就開始生成密鑰和提交密鑰。打開Git Bash,建立SSH key:
1 ssh-keygen -C 'your@email.address' -t rsa
而後要你輸入SSH密匙的存放位置,能夠無論,直接回車使用默認路徑。再輸入你想要的密碼,SSH key就生成了。如今你須要將這個Key提交到GitHub,首先打開Key保存的位置,裏面會有三個文件,找到id_rsa.pub,用文本編輯器打開,複製裏面的所有字符。到GitHub,在右上方工具欄裏找到Account Settings。在這個頁面上有一個SSH Public Keys標籤,選擇Add another public key。Title能夠隨便填一個,Key就粘貼剛纔的字符,提交。
完成這些工做後,就能夠上傳本身的代碼了。找到本身要分享上傳的代碼文件夾,右擊選擇Git Bash,或者在Git Bash中進入這個文件夾。創建一個倉庫:
1 git init
選擇要添加進倉庫的文件:
1 git add .
通常若是你想分享這個文件夾裏的全部代碼,就在 add後面加「.」,上面的例子就是這樣,若是傳指定的,只須要把「.」改成文件名便可,如今只是選擇了要加入倉庫的文件,下面纔是添加進入倉庫:
1 git commit -m 'Test'
-m後面跟一個參數,表示說明,將代碼提交到GitHub後,將會在代碼文件信息上顯示這個說明,以下圖標記的地方。
搞了這麼久,如今纔開始把本地倉庫上傳到GitHub了,下面兩行命令搞定問題:
首先須要pull下代碼,才能push上傳成功
(git pull origin master)
繼續下面的操做
1 git remote add origin git@github.com:XXX/XXX.git
2 git pull origin master
3 git push -u origin master
這個git@github.com:XXX/XXX.git就是上面建立項目是生成的地址。如今打開你的項目網址,你就能夠發現你的代碼已經展現出來了。若是你要更新代碼的話,就重複上面的吧。
若是提交了敏感信息,好比代碼中設置的本身的密碼什麼的忘刪除就上傳上去了怎麼辦?從新修改事後上傳依然有歷史記錄,而使用Git刪除歷史記錄貌似很麻煩,因而就採用刪除項目吧,刪除了再從新上傳。刪除項目須要在GitHub網站上右上方找到admin按鈕,進去後右邊最下面有個刪除的按鈕,這樣就能夠刪除了。
2、 Git 經常使用命令
1) 遠程倉庫相關命令
檢出倉庫: $ git clone git://github.com/jquery/jquery.git
查看遠程倉庫:$ git remote -v
添加遠程倉庫:$ git remote add [name] [url]
刪除遠程倉庫:$ git remote rm [name]
修改遠程倉庫:$ git remote set-url --push [name] [newUrl]
拉取遠程倉庫:$ git pull [remoteName] [localBranchName]
推送遠程倉庫:$ git push [remoteName] [localBranchName]
*若是想把本地的某個分支test提交到遠程倉庫,並做爲遠程倉庫的master分支,或者做爲另一個名叫test的分支,以下:
$git push origin test:master // 提交本地test分支做爲遠程的master分支
$git push origin test:test // 提交本地test分支做爲遠程的test分支
2)分支(branch)操做相關命令
查看本地分支:$ git branch
查看遠程分支:$ git branch -r
建立本地分支:$ git branch [name] ----注意新分支建立後不會自動切換爲當前分支
切換分支:$ git checkout [name]
建立新分支並當即切換到新分支:$ git checkout -b [name]
刪除分支:$ git branch -d [name] ---- -d選項只能刪除已經參與了合併的分支,對於未有合併的分支是沒法刪除的。若是想強制刪除一個分支,可使用-D選項
合併分支:$ git merge [name] ----將名稱爲[name]的分支與當前分支合併
建立遠程分支(本地分支push到遠程):$ git push origin [name]
刪除遠程分支:$ git push origin :heads/[name] 或 $ gitpush origin :[name]
*建立空的分支:(執行命令以前記得先提交你當前分支的修改,不然會被強制刪乾淨沒得後悔)
$git symbolic-ref HEAD refs/heads/[name]
$rm .git/index
$git clean -fdx
3)版本(tag)操做相關命令
查看版本:$ git tag
建立版本:$ git tag [name]
刪除版本:$ git tag -d [name]
查看遠程版本:$ git tag -r
建立遠程版本(本地版本push到遠程):$ git push origin [name]
刪除遠程版本:$ git push origin :refs/tags/[name]
合併遠程倉庫的tag到本地:$ git pull origin --tags
上傳本地tag到遠程倉庫:$ git push origin --tags
建立帶註釋的tag:$ git tag -a [name] -m 'yourMessage'
4) 子模塊(submodule)相關操做命令
添加子模塊:$ git submodule add [url] [path]
如:$git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
初始化子模塊:$ git submodule init ----只在首次檢出倉庫時運行一次就行
更新子模塊:$ git submodule update ----每次更新或切換分支後都須要運行一下
刪除子模塊:(分4步走哦)
1) $ git rm --cached [path]
2) 編輯「.gitmodules」文件,將子模塊的相關配置節點刪除掉
3) 編輯「 .git/config」文件,將子模塊的相關配置節點刪除掉
4) 手動刪除子模塊殘留的目錄
5)忽略一些文件、文件夾不提交
在倉庫根目錄下建立名稱爲「.gitignore」的文件,寫入不須要的文件夾名或文件,每一個元素佔一行便可,如
target
bin
*.db
3、 Git 命令詳解
如今咱們有了本地和遠程的版本庫,讓咱們來試着用用Git的基本命令:
git pull:從其餘的版本庫(既能夠是遠程的也能夠是本地的)將代碼更新到本地,例如:'git pull origin master'就是將origin這個版本庫的代碼更新到本地的master主枝,該功能相似於SVN的update
git add:是將當前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示記入了版本歷史中,這也是提交以前所須要執行的一步,例如'git add app/model/user.rb'就會增長app/model/user.rb文件到Git的索引中,該功能相似於SVN的add
git rm:從當前的工做空間中和索引中刪除文件,例如'git rm app/model/user.rb',該功能相似於SVN的rm、del
git commit:提交當前工做空間的修改內容,相似於SVN的commit命令,例如'git commit -m story #3, add user model',提交的時候必須用-m來輸入一條提交信息,該功能相似於SVN的commit
git push:將本地commit的代碼更新到遠程版本庫中,例如'git push origin'就會將本地的代碼更新到名爲orgin的遠程版本庫中
git log:查看歷史日誌,該功能相似於SVN的log
git revert:還原一個版本的修改,必須提供一個具體的Git版本號,例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20',Git的版本號都是生成的一個哈希值
上面的命令幾乎都是每一個版本控制工具所公有的,下面就開始嘗試一下Git獨有的一些命令:
git branch:對分支的增、刪、查等操做,例如'git branch new_branch'會從當前的工做版本建立一個叫作new_branch的新分支,'git branch -D new_branch'就會強制刪除叫作new_branch的分支,'git branch'就會列出本地全部的分支
git checkout:Git的checkout有兩個做用,其一是在不一樣的branch之間進行切換,例如'git checkout new_branch'就會切換到new_branch的分支上去;另外一個功能是還原代碼的做用,例如'git checkout app/model/user.rb'就會將user.rb文件從上一個已提交的版本中更新回來,未提交的內容所有會回滾
git rebase:用下面兩幅圖解釋會比較清楚一些,rebase命令執行後,其實是將分支點從C移到了G,這樣分支也就具備了從C到G的功能
git reset:將當前的工做目錄徹底回滾到指定的版本號,假設以下圖,咱們有A-G五次提交的版本,其中C的版本號是 bbaf6fb5060b4875b18ff9ff637ce118256d6f20(git log能夠獲得),咱們執行了'git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20'那麼結果就只剩下了A-C三個提交的版本
git stash:將當前未提交的工做存入Git工做棧中,時機成熟的時候再應用回來,這裏暫時提一下這個命令的用法,後面在技巧篇會重點講解
git config:利用這個命令能夠新增、更改Git的各類設置,例如'git config branch.master.remote origin'就將master的遠程版本庫設置爲別名叫作origin版本庫,後面在技巧篇會利用這個命令個性化設置你的Git,爲你打造獨一無二的 Git
git tag:能夠將某個具體的版本打上一個標籤,這樣你就不須要記憶複雜的版本號哈希值了,例如你可使用'git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20'來標記這個被你還原的版本,那麼之後你想查看該版本時,就可使用 revert_version標籤名,而不是哈希值了
Git 之因此可以提供方便的本地分支等特性,是與它的文件存儲機制有關的。Git存儲版本控制信息時使用它本身定義的一套文件系統存儲機制,在代碼根目錄下有一個.git文件夾,會有以下這樣的目錄結構:
有幾個比較重要的文件和目錄須要解釋一下:HEAD文件存放根節點的信息,其實目錄結構就表示一個樹型結構,Git採用這種樹形結構來存儲版本信息,那麼HEAD就表示根;refs目錄存儲了你在當前版本控制目錄下的各類不一樣引用(引用指的是你本地和遠程所用到的各個樹分支的信息),它有heads、remotes、stash、tags四個子目錄,分別存儲對不一樣的根、遠程版本庫、Git棧和標籤的四種引用,你能夠經過命令'git show-ref'更清晰地查看引用信息;logs目錄根據不一樣的引用存儲了日誌信息。所以,Git只須要代碼根目錄下的這一個.git目錄就能夠記錄完整的版本控制信息,而不是像SVN那樣根目錄和子目錄下都有.svn目錄。那麼下面就來看一下Git與SVN的區別吧
在GitHub上分享和展現你的代碼2011-10-14 22:34
最近大愛Web編程,因而尋找各類代碼中,而後就發現了GitHub這個網站,若是你知道Google Code,那麼你就知道這個GitHub是作什麼的了。不過GitHub主要是用做基於Git的分佈式版本管理系統的庫,能夠保存和管理本身的代碼,並且主要用做代碼的合做開發。不過對於我來講,Git控制系統還比較難以掌握,或者開發小系統還不太用得着,所以我把GitHub看成分享和展現代碼的網站。
註冊GitHub後你就會有0.3G的免費空間,不過只能建立公開項目,這也知足代碼分享的目的,我最喜歡的卻是它的代碼展現方式,能夠直接瀏覽你的代碼,代碼是通過高亮、添加行號處理過的,十分漂亮,體驗一流,好比這個Webpy託管的地方。而做爲想要了解你代碼的人,能夠選擇直接在線瀏覽本身感興趣的,也能夠直接下載壓縮包,或者直接使用Git clone到本地。
由於GitHub是基於Git版本控制系統,因此你上傳修改代碼什麼的,都須要使用Git工具。我這裏主要是用來分享和展現代碼,因此不想在版本控制方面作過多的闡述,下面就簡單講解一下怎麼在GitHub上新建一個項目,還有把本身的代碼傳上去。下面的前提是你已經註冊了GitHub和下載安裝了Git——Git下載、Windows版本下載。
上傳分享代碼
1.在GitHub上創建項目
登陸GitHub後,你能夠在右邊靠中那裏找到一個按鈕「New Repository」,點擊事後,填入項目名稱、說明和網址事後就能夠建立了,而後會出現一個提示頁面,記下相似git@github.com:XXX/XXX.git的地址,這個就是你這個項目的地址了。
2.配置Git以及上傳代碼
安裝Git成功後,若是是Windows下,選擇Git Bash,在命令行中完成一切,可能開始有點麻煩,不過就那幾條命令行,用幾回就記住啦。首先初始設置Git:
1 git config --global user.name "Your Real Name"
2 git config --global user.email you@email.address
而後開始進行最麻煩的一步了,你須要上傳文件到GitHub的Git系統上,得須要一個SSH密匙來認證,下面就開始生成密鑰和提交密鑰。打開Git Bash,建立SSH key:
1 ssh-keygen -C 'your@email.address' -t rsa
而後要你輸入SSH密匙的存放位置,能夠無論,直接回車使用默認路徑。再輸入你想要的密碼,SSH key就生成了。如今你須要將這個Key提交到GitHub,首先打開Key保存的位置,裏面會有三個文件,找到id_rsa.pub,用文本編輯器打開,複製裏面的所有字符。到GitHub,在右上方工具欄裏找到Account Settings。在這個頁面上有一個SSH Public Keys標籤,選擇Add another public key。Title能夠隨便填一個,Key就粘貼剛纔的字符,提交。
完成這些工做後,就能夠上傳本身的代碼了。找到本身要分享上傳的代碼文件夾,右擊選擇Git Bash,或者在Git Bash中進入這個文件夾。創建一個倉庫:
1 git init
選擇要添加進倉庫的文件:
1 git add .
通常若是你想分享這個文件夾裏的全部代碼,就在 add後面加「.」,上面的例子就是這樣,若是傳指定的,只須要把「.」改成文件名便可,如今只是選擇了要加入倉庫的文件,下面纔是添加進入倉庫:
1 git commit -m 'Test'
-m後面跟一個參數,表示說明,將代碼提交到GitHub後,將會在代碼文件信息上顯示這個說明,以下圖標記的地方。
搞了這麼久,如今纔開始把本地倉庫上傳到GitHub了,下面兩行命令搞定問題:
首先須要pull下代碼,才能push上傳成功
(git pull origin master)
繼續下面的操做
1 git remote add origin git@github.com:XXX/XXX.git
2 git pull origin master
3 git push -u origin master
這個git@github.com:XXX/XXX.git就是上面建立項目是生成的地址。如今打開你的項目網址,你就能夠發現你的代碼已經展現出來了。若是你要更新代碼的話,就重複上面的吧。
若是提交了敏感信息,好比代碼中設置的本身的密碼什麼的忘刪除就上傳上去了怎麼辦?從新修改事後上傳依然有歷史記錄,而使用Git刪除歷史記錄貌似很麻煩,因而就採用刪除項目吧,刪除了再從新上傳。刪除項目須要在GitHub網站上右上方找到admin按鈕,進去後右邊最下面有個刪除的按鈕,這樣就能夠刪除了。
2、 Git 經常使用命令
1) 遠程倉庫相關命令
檢出倉庫: $ git clone git://github.com/jquery/jquery.git
查看遠程倉庫:$ git remote -v
添加遠程倉庫:$ git remote add [name] [url]
刪除遠程倉庫:$ git remote rm [name]
修改遠程倉庫:$ git remote set-url --push [name] [newUrl]
拉取遠程倉庫:$ git pull [remoteName] [localBranchName]
推送遠程倉庫:$ git push [remoteName] [localBranchName]
*若是想把本地的某個分支test提交到遠程倉庫,並做爲遠程倉庫的master分支,或者做爲另一個名叫test的分支,以下:
$git push origin test:master // 提交本地test分支做爲遠程的master分支
$git push origin test:test // 提交本地test分支做爲遠程的test分支
2)分支(branch)操做相關命令
查看本地分支:$ git branch
查看遠程分支:$ git branch -r
建立本地分支:$ git branch [name] ----注意新分支建立後不會自動切換爲當前分支
切換分支:$ git checkout [name]
建立新分支並當即切換到新分支:$ git checkout -b [name]
刪除分支:$ git branch -d [name] ---- -d選項只能刪除已經參與了合併的分支,對於未有合併的分支是沒法刪除的。若是想強制刪除一個分支,可使用-D選項
合併分支:$ git merge [name] ----將名稱爲[name]的分支與當前分支合併
建立遠程分支(本地分支push到遠程):$ git push origin [name]
刪除遠程分支:$ git push origin :heads/[name] 或 $ gitpush origin :[name]
*建立空的分支:(執行命令以前記得先提交你當前分支的修改,不然會被強制刪乾淨沒得後悔)
$git symbolic-ref HEAD refs/heads/[name]
$rm .git/index
$git clean -fdx
3)版本(tag)操做相關命令
查看版本:$ git tag
建立版本:$ git tag [name]
刪除版本:$ git tag -d [name]
查看遠程版本:$ git tag -r
建立遠程版本(本地版本push到遠程):$ git push origin [name]
刪除遠程版本:$ git push origin :refs/tags/[name]
合併遠程倉庫的tag到本地:$ git pull origin --tags
上傳本地tag到遠程倉庫:$ git push origin --tags
建立帶註釋的tag:$ git tag -a [name] -m 'yourMessage'
4) 子模塊(submodule)相關操做命令
添加子模塊:$ git submodule add [url] [path]
如:$git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
初始化子模塊:$ git submodule init ----只在首次檢出倉庫時運行一次就行
更新子模塊:$ git submodule update ----每次更新或切換分支後都須要運行一下
刪除子模塊:(分4步走哦)
1) $ git rm --cached [path]
2) 編輯「.gitmodules」文件,將子模塊的相關配置節點刪除掉
3) 編輯「 .git/config」文件,將子模塊的相關配置節點刪除掉
4) 手動刪除子模塊殘留的目錄
5)忽略一些文件、文件夾不提交
在倉庫根目錄下建立名稱爲「.gitignore」的文件,寫入不須要的文件夾名或文件,每一個元素佔一行便可,如
target
bin
*.db
3、 Git 命令詳解
如今咱們有了本地和遠程的版本庫,讓咱們來試着用用Git的基本命令:
git pull:從其餘的版本庫(既能夠是遠程的也能夠是本地的)將代碼更新到本地,例如:'git pull origin master'就是將origin這個版本庫的代碼更新到本地的master主枝,該功能相似於SVN的update
git add:是將當前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示記入了版本歷史中,這也是提交以前所須要執行的一步,例如'git add app/model/user.rb'就會增長app/model/user.rb文件到Git的索引中,該功能相似於SVN的add
git rm:從當前的工做空間中和索引中刪除文件,例如'git rm app/model/user.rb',該功能相似於SVN的rm、del
git commit:提交當前工做空間的修改內容,相似於SVN的commit命令,例如'git commit -m story #3, add user model',提交的時候必須用-m來輸入一條提交信息,該功能相似於SVN的commit
git push:將本地commit的代碼更新到遠程版本庫中,例如'git push origin'就會將本地的代碼更新到名爲orgin的遠程版本庫中
git log:查看歷史日誌,該功能相似於SVN的log
git revert:還原一個版本的修改,必須提供一個具體的Git版本號,例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20',Git的版本號都是生成的一個哈希值
上面的命令幾乎都是每一個版本控制工具所公有的,下面就開始嘗試一下Git獨有的一些命令:
git branch:對分支的增、刪、查等操做,例如'git branch new_branch'會從當前的工做版本建立一個叫作new_branch的新分支,'git branch -D new_branch'就會強制刪除叫作new_branch的分支,'git branch'就會列出本地全部的分支
git checkout:Git的checkout有兩個做用,其一是在不一樣的branch之間進行切換,例如'git checkout new_branch'就會切換到new_branch的分支上去;另外一個功能是還原代碼的做用,例如'git checkout app/model/user.rb'就會將user.rb文件從上一個已提交的版本中更新回來,未提交的內容所有會回滾
git rebase:用下面兩幅圖解釋會比較清楚一些,rebase命令執行後,其實是將分支點從C移到了G,這樣分支也就具備了從C到G的功能
git reset:將當前的工做目錄徹底回滾到指定的版本號,假設以下圖,咱們有A-G五次提交的版本,其中C的版本號是 bbaf6fb5060b4875b18ff9ff637ce118256d6f20(git log能夠獲得),咱們執行了'git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20'那麼結果就只剩下了A-C三個提交的版本
git stash:將當前未提交的工做存入Git工做棧中,時機成熟的時候再應用回來,這裏暫時提一下這個命令的用法,後面在技巧篇會重點講解
git config:利用這個命令能夠新增、更改Git的各類設置,例如'git config branch.master.remote origin'就將master的遠程版本庫設置爲別名叫作origin版本庫,後面在技巧篇會利用這個命令個性化設置你的Git,爲你打造獨一無二的 Git
git tag:能夠將某個具體的版本打上一個標籤,這樣你就不須要記憶複雜的版本號哈希值了,例如你可使用'git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20'來標記這個被你還原的版本,那麼之後你想查看該版本時,就可使用 revert_version標籤名,而不是哈希值了
Git 之因此可以提供方便的本地分支等特性,是與它的文件存儲機制有關的。Git存儲版本控制信息時使用它本身定義的一套文件系統存儲機制,在代碼根目錄下有一個.git文件夾,會有以下這樣的目錄結構:
有幾個比較重要的文件和目錄須要解釋一下:HEAD文件存放根節點的信息,其實目錄結構就表示一個樹型結構,Git採用這種樹形結構來存儲版本信息,那麼HEAD就表示根;refs目錄存儲了你在當前版本控制目錄下的各類不一樣引用(引用指的是你本地和遠程所用到的各個樹分支的信息),它有heads、remotes、stash、tags四個子目錄,分別存儲對不一樣的根、遠程版本庫、Git棧和標籤的四種引用,你能夠經過命令'git show-ref'更清晰地查看引用信息;logs目錄根據不一樣的引用存儲了日誌信息。所以,Git只須要代碼根目錄下的這一個.git目錄就能夠記錄完整的版本控制信息,而不是像SVN那樣根目錄和子目錄下都有.svn目錄。那麼下面就來看一下Git與SVN的區別吧