本文為作者原創,轉載請注明出處(http://www.cnblogs.com/mar-q/)by 負贔屓
Mark一下,最近用的比較少,擔心忘記了。
作為一個程序員,git或者SVN是必備技能,尤其是幾個電腦經常切換的,用git同步代碼是非常方便的一件事情。
git代碼倉庫的實現主要兩種方式:
一是自己搭服務器,如果你有興趣,完全可以自己在家里搭建一個git服務器http://www.cnblogs.com/mar-q/p/6404558.html,在服務器里部署git環境,家里放個服務器比較費電,年輕人,如果你想geek的話,可以買個樹莓派,或者更geek點,找個廢舊的Android手機,裝個Ubuntu上去,這樣就不用擔心耗電了,但是如果出現三星炸彈似乎也不太好,所以你也可以租用一個阿里雲的服務器,貌似學生證可以免費租用一個,而且價格也有優惠,至於怎么配置,網上很多教程,我就不演示了;
二是使用GitHub等網站提供的遠程倉庫,當然代碼上傳到GitHub別人就能參觀瀏覽了,如果你對自己的水平沒自信,可以使用私人倉庫,不過GitHub的私人倉庫是收費的,腫么辦呢,這里推薦大家使用國內的碼雲(名字起得真好),是開源中國的一個子項目,做的還是很友好的,而且支持密碼登錄,這樣可以省去配置秘鑰的步驟。
OK,上面是我的安利,詳細我就不講了,大家可以自行百度。下面主要寫給自己看的。。。
使用git在本地創建一個項目的過程:
$ makdir G:\python ##創建一個項目文件夾 $ cd G:\python ##打開文件夾 $ git init ##初始化本地git倉庫 $ git commit -m 'first commit' ##提交更新並添加備注“first commit”
以上為本地倉庫創建提交流程
登錄碼雲,創建一個項目python,添加README文件,復制鏈接
$ git remote add origin https://git.oschina.net/xxxxxx/python.git ##連接遠程github項目 $ git push -u origin master ##將本地項目更新到github項目上去
容易出現的問題及常用命令:
git status ##查看git狀態 git pull origin master ##pull遠程倉庫 git remote ##查看遠程倉庫及其分支 git rm origin ##刪除本地倉庫
問題1:執行git remote add xxxx報錯fatal: remote origin already exists.
解決辦法:git remote rm origin刪除遠程倉庫的origin,然后再add添加遠程倉庫
問題2:執行git push origin master報錯fatal: I don't handle protocol 'git@https'
解決辦法:那是因為你用了git@github...的add方式添加了遠程倉庫,請通過問題1刪除遠程倉庫再重新添加
問題3:執行git push origin master報錯error: failed to push some refs to...
解決辦法:大部分是由於github中的README.md文件不在本地代碼目錄中導致的, 先通過git pull --rebase origin master進行合並,再通過git push -u origin master上傳
問題4:執行git pull origin master報錯fatal: refusing to merge unrelated histories
解決辦法:這是一個常見問題,要把兩個不同的項目合並,需要添加一個強制命令:git pull origin master --allow-unrelated-histories
問題5:如何添加一個.gitignore,或者如何添加一個目錄(文件)到ignore中
解決辦法:一、還未添加git的項目:在項目目錄下新建一個.gitignore文件(Windows無法新建命名為.gitignore,可以命名為.gitignore.,但是我更推薦使用sublime等工具來創建命名即可),在.gitignore中添加你需要過濾的文件即可。添加完成后git init即可;二、已經進行了git操作的項目,需要通過命令把相應的過濾文件緩存進行清空,清空后將代碼push,同步端直接pull即可:
git rm --cached -r [目錄名]
git commit -m 'clean ignore files'
問題6:" refusing to update checked out branch: refs/heads/master, By default, updating the current branch in a non-bare repository is denied, because it will make the index and work tree inconsistent……"
解決辦法:這個錯誤是我在搭建裸倉庫時碰到的,主要原因是git初始默認receive.denyCurrentBrach是拒絕接收push的,我們要向中心倉庫push就需要設置它允許接收,在中心倉庫輸入:
git config receive.denyCurrentBranch ignore
關於這個bare倉庫可以多談幾句,通過bare建立的.git倉庫是沒有工作區的,所以又稱為裸倉庫,通常用它作為中心倉庫。
問題7:Git add或commit出現:“ fatal: Pathspec 'xxx' is in submodule 'yyy' 異常”
解決辦法:碰到這個問題是開發某小哥自己在yyy文件夾里搞了一個git倉庫,然后另一個小伙直接放到項目中了,結果兩個git倉庫相互作用,導致項目的git倉庫無法添加xxx到項目中,OK,總之這是兩個倉庫,通常我們到GitHub去clone別人的代碼也會碰到這類問題,需要做的很簡單,刪掉yyy下面的git倉庫,並把當前項目git的cache中的yyy清空掉:
git rm -rf --cached yyy git add . git commit -m 'add something' git push origin master
一些經驗分享:注意平時在多人操作同一個git倉庫時候盡量用不同的分支,在合並代碼的時候使用一個主分支即可,此外,如果你忘記了代碼的更新狀態,在push操作之前盡量先pull。