1. 程式人生 > >git命令收集與整理(windows)

git命令收集與整理(windows)

最近開始又撿起git,第一家公司用的就是git,一直掌握的也不深刻,就知道常用的幾個命令,雖然現在用svn,但是覺得git還是不能丟,遂又撿起來了。先總結一部分目前練習用到的,慢慢填補吧~

github荒廢太久了,偶爾也需要拔拔雜草什麼的,而且最近學react,正好可以上傳些demo。git都是新下的,而且以前用的是unix系統操作,現在用windows操作相當於重頭再來了。

首先,git安裝好了就開啟cmd,輸入git/git --version試一下。

接下來可以進行配置啦~(設定全域性的使用者名稱與email)

git config --global user.name "xxx"
git config --global user.email "xxx"
git config --global push.default simple

使用git需要進行推送,則最後一步一定要進行配置。git 2.0更改push.default為simple,意味著執行 git push 沒有指定分支時,只有當前分支會被 push 到你使用 git pull 獲取的程式碼。

我在github有新建一個庫,所以直接進入本地存放git專案的目錄,git init初始化下(以便git對該目錄下檔案進行版本控制),直接git clone xxx.git了(即把我github上的庫克隆到本地,這個目錄在github上的專案裡可以看到~)

把想加的檔案新增到資料夾裡,執行git add 資料夾/ 

git add 主要用於把我們要提交檔案的資訊新增到暫存區中

git add <path> 把<path>新增到索引庫(<path>可以是檔案也可以是目錄)

git add . 把工作時的所有變化提交到暫存區,包括內容修改(modified)和新檔案(new),但不包括刪除的檔案

git add -u 僅監控已經add的檔案(即tracked檔案),他會將被修改的檔案存到暫存區,但不會提交新檔案(untracked)

git add -A 提交所有變化到暫存區

git status 可以時刻看見倉庫狀態,有什麼檔案被修改被刪除等等。。。

但素,出問題了!!warning IF will be replaced by CRLF 查了下,windows中的換行符為 CRLF, 而在

Linux下的換行符為LF,所以會出現提示。

解決辦法:http://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf

即:(設定換行符轉換)

git config core.autocrlf false

問題解決啦~可以正常add啦,下一步git commit(將暫存區的內容新增到本地倉庫中)

git commit -m <message> 將新增到暫存區的內容,進行提交

git commit -a -m <message>  能提交修改過但沒有放到暫存區的內容

我用的是git commit -m 'add react demo',but又粗錯啦!! error:xxx did not match any file(s) known to git 說是不匹配呢

解決辦法:據說windows下應該換成雙引號,換了試下,果然好用,提交完成。

git push(將本地內容提交到遠端),!! No configured push destination 原來是沒有配置遠端地址,好的,配吧(解決辦法):

git remote add origin [email protected]:xiabiande/object.git 然後git push。。。你沒猜錯又遇到問題了,permission denied (publickey) 沒有許可權

遂查之~,(參考:http://blog.itpub.net/25851087/viewspace-1262468/)要生成金鑰上傳github並進行網路連通性測試  ssh-keygen -t rsa -C "[email protected]" ,如果此時說該命令不是內部命令,就去 某盤/git/usr/bin/ 找到ssh-keygen.exe 並把該路徑貼上到配置環境變數的系統變數path的最後(別忘了前面加;)

再使用剛才的命令後,生成兩個檔案id_rsa(私鑰)和id_rsa.pub(公鑰),將id_rsa.pub的內容上傳到github的ssh-keys管理中,最好用筆記本開啟,如果上傳時說你沒有以ssh-開頭什麼的就說明,公鑰的檔案格式被你改變了,所以最好用筆記本開啟{血與淚的教訓,科科} 接下來,執行ssh -T [email protected] 進行本地與網站的連線測試。嘿~我成功的連上了,連上了~並且和我打了招呼:hi~xx!You've successfully authenticated, but GitHub does not provide shell access ,呵呵,沒有提供許可權,好吧

解決方法:git remote set-url origin [email protected]:xiabiande/object.git 重新加一下遠端地址 (http://stackoverflow.com/questions/26953071/github-authentication-failed-github-does-not-provide-shell-access)

 ok,這時候還是不可以push的,因為提示你,要先pull才可以,git pull origin master 將遠端的主分支down下來,正常這句話還可以合併本地內容,但是 !!fatal:refusing to merge unrelated histories 說是拒絕合併不相關的歷史,確實本地是新加的內容還重未和線上連線過。

解決辦法:git pull origin master --allow-unrelated-histories 就是告訴系統我允許合併不相關歷史的內容。

git push 系統提示 git push --set-upstream origin master  因為是第一次push,所以按它提示的來就好啦。

 

耶耶,終於可以push啦,我的小demo,我的天~hoho,我真是太棒了【此刻,想配一張陳意涵陽光燦爛的笑容臉】

其實只要有耐心,沒什麼解決不了的困難嘛~

 

/* 2017/01/10更 */

補充:windows使用者請注意,windows使用者請注意

  1. 如果你在操作commit時遇到pathspec XXX did not match any files commit這個問題,git commit後面的提交資訊要用雙引號啊!!(或者你可以調一下全域性的core.autocrlf false)

git config --global core.autocrlf false

  2.如果你在add時遇到unable to stat ... Filename too long 這個問題時,windows真的挺坑的,windows的限制是不一樣的啦,詳情:http://stackoverflow.com/questions/22575662/filename-too-long-in-git-for-windows

git config --system core.longpaths true