Github上傳項目步驟和常見問題

GitHub上分享和展示你的代碼2011-10-14 22:34

最近大愛Web編程,於是尋找各種代碼中,然後就發現了GitHub這個網站,如果你知道Google Code,那麼你就知道這個GitHub是做什麼的了。不過GitHub主要是用作基於Git的分佈式版本管理系統的庫,可以保存和管理自己的代碼,而且主要用作代碼的合作開發。不過對於我來說,Git控制系統還比較難以掌握,或者開發小系統還不太用得着,因此我把GitHub當作分享和展示代碼的網站。

wKioL1TwMp-Qm9tUAAC1JCMX6SM296.jpg

註冊GitHub後你就會有0.3G的免費空間,不過只能創建公開項目,這也滿足代碼分享的目的,我最喜歡的倒是它的代碼展示方式,可以直接瀏覽你的代碼,代碼是經過高亮、添加行號處理過的,十分漂亮,體驗一流,比如這個Webpy託管的地方。而作爲想要了解你代碼的人,可以選擇直接在線瀏覽自己感興趣的,也可以直接下載壓縮包,或者直接使用Git clone到本地。

因爲GitHub是基於Git版本控制系統,所以你上傳修改代碼什麼的,都需要使用Git工具。我這裏主要是用來分享和展示代碼,所以不想在版本控制方面做過多的闡述,下面就簡單講解一下怎麼在GitHub上新建一個項目,還有把自己的代碼傳上去。下面的前提是你已經註冊了GitHub和下載安裝了Git——Git下載Windows版本下載

上傳分享代碼

1.GitHub上建立項目

登錄GitHub後,你可以在右邊靠中那裏找到一個按鈕“New Repository”,點擊過後,填入項目名稱、說明和網址過後就可以創建了,然後會出現一個提示頁面,記下類似[email protected]: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 [email protected]

 

然後開始進行最麻煩的一步了,你需要上傳文件到GitHubGit系統上,得需要一個SSH密匙來認證,下面就開始生成密鑰和提交密鑰。打開Git Bash,創建SSH key:

1 ssh-keygen -C '[email protected]' -t rsa

 

然後要你輸入SSH密匙的存放位置,可以不管,直接回車使用默認路徑。再輸入你想要的密碼,SSH key就生成了。現在你需要將這個Key提交到GitHub,首先打開Key保存的位置,裏面會有三個文件,找到id_rsa.pub,用文本編輯器打開,複製裏面的全部字符。到GitHub,在右上方工具欄裏找到Account Settings。在這個頁面上有一個SSH Public Keys標籤,選擇Add another public keyTitle可以隨便填一個,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

繼續下面的操作

 git remote add origin [email protected]:XXX/XXX.git

git pull origin master


3 git push -u origin master

 

這個[email protected]:XXX/XXX.git就是上面創建項目是生成的地址。現在打開你的項目網址,你就可以發現你的代碼已經展示出來了。如果你要更新代碼的話,就重複上面的吧。

如果提交了敏感信息,比如代碼中設置的自己的密碼什麼的忘刪除就上傳上去了怎麼辦?重新修改過後上傳依然有歷史記錄,而使用Git刪除歷史記錄貌似很麻煩,於是就採用刪除項目吧,刪除了再重新上傳。刪除項目需要在GitHub網站上右上方找到admin按鈕,進去後右邊最下面有個刪除的按鈕,這樣就可以刪除了。

 

二、 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

 

三、 Git 命令詳解

現在我們有了本地和遠程的版本庫,讓我們來試着用用Git的基本命令:

git pull從其他的版本庫(既可以是遠程的也可以是本地的)將代碼更新到本地,例如:'git pull origin master'就是將origin這個版本庫的代碼更新到本地的master主枝,該功能類似於SVNupdate

git add是將當前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示記入了版本歷史中,這也是提交之前所需要執行的一步,例如'git add app/model/user.rb'就會增加app/model/user.rb文件到Git的索引中,該功能類似於SVNadd

git rm從當前的工作空間中和索引中刪除文件,例如'git rm app/model/user.rb',該功能類似於SVNrmdel

git commit提交當前工作空間的修改內容,類似於SVNcommit命令,例如'git commit -m story #3, add user model',提交的時候必須用-m來輸入一條提交信息,該功能類似於SVNcommit

git push將本地commit的代碼更新到遠程版本庫中,例如'git push origin'就會將本地的代碼更新到名爲orgin的遠程版本庫中

git log查看歷史日誌,該功能類似於SVNlog

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 checkoutGitcheckout有兩個作用,其一是在不同的branch之間進行切換,例如'git checkout new_branch'就會切換到new_branch的分支上去;另一個功能是還原代碼的作用,例如'git checkout app/model/user.rb'就會將user.rb文件從上一個已提交的版本中更新回來,未提交的內容全部會回滾

git rebase用下面兩幅圖解釋會比較清楚一些,rebase命令執行後,實際上是將分支點從C移到了G,這樣分支也就具有了從CG的功能

 

wKioL1TwMsvQMbHrAAGxq1rxdMQ678.jpg

git reset將當前的工作目錄完全回滾到指定的版本號,假設如下圖,我們有A-G五次提交的版本,其中C的版本號是 bbaf6fb5060b4875b18ff9ff637ce118256d6f20(git log可以得到),我們執行了'git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20'那麼結果就只剩下了A-C三個提交的版本

wKioL1TwMtixHDrIAAF9X2KXl7w968.jpg

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文件夾,會有如下這樣的目錄結構:

 wKiom1TwMdiCh7HXAACKoSUyBwY883.jpg

 

有幾個比較重要的文件和目錄需要解釋一下:HEAD文件存放根節點的信息,其實目錄結構就表示一個樹型結構,Git採用這種樹形結構來存儲版本信息,那麼HEAD就表示根;refs目錄存儲了你在當前版本控制目錄下的各種不同引用(引用指的是你本地和遠程所用到的各個樹分支的信息),它有headsremotesstashtags四個子目錄,分別存儲對不同的根、遠程版本庫、Git棧和標籤的四種引用,你可以通過命令'git show-ref'更清晰地查看引用信息;logs目錄根據不同的引用存儲了日誌信息。因此,Git只需要代碼根目錄下的這一個.git目錄就可以記錄完整的版本控制信息,而不是像SVN那樣根目錄和子目錄下都有.svn目錄。那麼下面就來看一下GitSVN的區別吧

 

 

一些可能遇到的問題解決:

如果輸入$ git remote add origin [email protected]:djqiang(github帳號名)/gitdemo(項目名).git
提示出錯信息:fatal: remote origin already exists.
解決辦法如下:
1、先輸入$ git remote rm origin
2、再輸入$ git remote add origin [email protected]:djqiang/gitdemo.git 就不會報錯了!
3、如果輸入$ git remote rm origin 還是報錯的話,error: Could not remove config section ‘remote.origin’. 我們需要修改gitconfig文件的內容
4、找到你的github的安裝路徑,我的是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8\etc
5、找到一個名爲gitconfig的文件,打開它把裏面的[remote "origin"]那一行刪掉就好了!

如果輸入$ ssh -T [email protected]
出現錯誤提示:Permission denied (publickey).因爲新生成的key不能加入ssh就會導致連接不上github。
解決辦法如下:
1、先輸入$ ssh-agent,再輸入$ ssh-add ~/.ssh/id_key,這樣就可以了。
2、如果還是不行的話,輸入ssh-add ~/.ssh/id_key 命令後出現報錯Could not open a connection to your authentication agent.解
決方法是key用Git Gui的ssh工具生成,這樣生成的時候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token等配置都用命令行來做。
3、最好檢查一下在你複製id_rsa.pub文件的內容時有沒有產生多餘的空格或空行,有些編輯器會幫你添加這些的。

如果輸入$ git push origin master
提示出錯信息:error:failed to push som refs to …….
解決辦法如下:
1、先輸入$ git pull origin master //先把遠程服務器github上面的文件拉下來
2、再輸入$ git push origin master
3、如果出現報錯 fatal: Couldn’t find remote ref master或者fatal: ‘origin’ does not appear to be a git repository以及fatal: Could not read from remote repository.
4、則需要重新輸入$ git remote add [email protected]:djqiang/gitdemo.git
使用git在本地創建一個項目的過程
$ makdir ~/hello-world    //創建一個項目hello-world
$ cd ~/hello-world       //打開這個項目
$ git init             //初始化
$ touch README
$ git add README        //更新README文件
$ git commit -m ‘first commit’     //提交更新,並註釋信息“first commit”
$ git remote add origin [email protected]:defnngj/hello-world.git     //連接遠程github項目
$ git push -u origin master     //將本地項目更新到github項目上去


從 github 執行 git pull 的時候提示 error: RPC failed,如:

error: RPC failed; result=52, HTTP code = 0fatal: The remote end hung up unexpectedly

應該是pull 內容更新太多,需要設置postBuffer更大些,具體看下面的鏈接

git config --global http.postBuffer 524288000

https://confluence.atlassian.com/pages/viewpage.action?pageId=301663284


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章