因新工作需要使用GIT,之前主要在SVN上操作,GIT只是臨時性,很多問題只是當時解決了,並沒有記錄。因此本博客正是出於此目的而寫。
0 基本克隆一個倉庫的步驟
首先,基於ssh-key本地生成公鑰,如ssh-keygen -t rsa -C "[email protected]";
然後,在託管代碼網站上添加個人公鑰;
最後,git clone your_code_ssh_link 即可;
1 clone 時 Host key verification failed
如下圖所示
此時,是因爲在之前詢問(yes/no)時可能直接回車,應該手動輸入yes;
2 git倉庫遷移
之前一直在維護一個repo,目前需要將之前的工作轉移至新的repo上,還需要保留LOG。參考http://www.07net01.com/2015/09/933800.html
1). 從原地址克隆一份裸版本庫,比如原本託管於 GitHub。
git clone --bare git://github.com/username/project.git
--bare 創建的克隆版本庫都不包含工作區,直接就是版本庫的內容,這樣的版本庫稱爲裸版本庫。
2). 然後到新的 Git 服務器上創建一個新項目,比如
GitCafe。
3). 以鏡像推送的方式上傳代碼到 GitCafe 服務器上。
cd project.git git push --mirror [email protected]/username/newproject.git
-- mirror 克隆出來的裸版本對上游版本庫進行了註冊,這樣可以在裸版本庫中使用git fetch命令和上游版本庫進行持續同步。
4). 刪除本地代碼
cd .. rm -rf project.git
5). 到新服務器 GitCafe 上找到 Clone 地址,直接 Clone 到本地就可以了。
git clone [email protected]/username/newproject.git
這種方式可以保留原版本庫中的所有內容
3 Git中的AutoCRLF選項
背景:近期由於在windows下clone後的repo在vmware裏的ubuntu下用。但是CMAKE-GUI始終報錯。後來查原因,定位在於ubuntu下的cmake-gui讀properties文件無法正確解析,因爲其中的\r\n的問題。解決:一開始在安裝時,就需要注意CR-LF的選項。如果已經安裝了,則可以設置AutoCRLF選項。
#提交時轉換爲LF,檢出時轉換爲CRLF
git config --global core.autocrlf true
#提交時轉換爲LF,檢出時不轉換
git config --global core.autocrlf input
#提交檢出均不轉換
git config --global core.autocrlf false
建議會用input選項。
詳細可以參考http://www.cnblogs.com/flying_bat/p/3324769.html
4 Git-Stash
背景:本地在master分支更改,並且沒有commit,所以在pull master時出現了conflict。解決:使用stash;首先,將本地修改存儲 git stash;然後 pull內容 git pull;最後 還原git stash pop;
事實上更合理的做法應該是在本地new branch
5 git reset --hard 補救
背景:由於需要查看之前的提交,所以使用了git reset --hard 但是最後想回來發現git log 已經不能顯示最近的git commit hash。
解決:使用git reflog可以顯示已經被刪除的commit的hash值 ,所以重新 找到需要回到的再使用 git reset --hard即可。如果你因爲reset等操作丟失一個提交的時候,你總是可以把它找回來。除非你的操作已經被git當做垃圾處理掉了,一般是30天以後。
詳細可以參考:http://www.cnblogs.com/mliudong/archive/2013/04/08/3007303.html