關於git常見的一些問題


本文為作者原創,轉載請注明出處(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM