第一步:當然是先安裝
windows上安裝git http://msysgit.github.io/
配置你的username 和email
$ git config --global user.name "Yourname"
$ git config --global user.email "email@example.com"
建立版本庫
$ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit
第二步,通過git init命令把這個目錄變成git可以管理的倉庫
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
瞬間Git就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository),細心的讀者可以發現當前目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裡面的檔案,不然改亂了,就把Git倉庫給破壞了。
如果你沒有看到.git目錄,那是因為這個目錄預設是隱藏的,用
ls -ah
命令就可以看見。
現在我們編寫一個readme.txt檔案,內容如下:
Git is a version control system.
Git is free software.
一定要放到learngit目錄下(子目錄也行),因為這是一個Git倉庫,放到其他地方Git再厲害也找不到這個檔案。
和把大象放到冰箱需要3步相比,把一個檔案放到Git倉庫只需要兩步。
第一步,用命令git add告訴Git,把檔案新增到倉庫
$ git add readme.txt
第二步,用命令git commit告訴Git,把檔案提交到倉庫:
$ git commit -m "wrote a readme file"
[master (root-commit)cb926e7] wrote a readme file 1 file changed, 2
insertions(+) create mode 10064 readme.txt
git commit命令,-m後面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣就能從歷史記錄裡方便地找到改動記錄
git commit命令執行成功後會告訴你,1個檔案改動(我們新新增的readme.txt檔案),插入了兩行內容(readme.txt有兩行內容)
為什麼Git新增檔案需要add,commit一共兩步呢?因為commit可以一次提交很多檔案,所以你可以多次add不同的檔案,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m “add 3 files”
我們已經成功地新增並提交了一個readme.txt檔案,現在,是時候繼續工作了,於是,我們繼續修改readme.txt檔案,改成如下內容:
遠端倉庫
第1步:建立SSH Key 在使用者主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個檔案,如果已經有了,可直接跳到下一步。如果沒有,開啟Shell(Windows下開啟Git Bash),建立SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
第2步:登陸GitHub,開啟“Account settings”,“SSH Keys”頁面:
然後,點“Add SSH Key”,填上任意Title,在Key文字框裡貼上id_rsa.pub檔案的內容:
點“Add Key”,你就應該看到已經新增的Key:
ps: id_rsa是私鑰,不能洩露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
目前,在GitHub上的這個learngit倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的內容推送到GitHub倉庫。
現在,我們根據GitHub的提示,在本地的learngit倉庫下執行命令:
$ git remote add origin git@github.com:michaelliao/learngit.git
新增後,遠端庫的名字就是origin,這是Git預設的叫法,也可以改成別的,但是origin這個名字一看就知道是遠端庫。
下一步,就可以把本地庫的所有內容推送到遠端庫上
$ git push -u origin master
Counting objects: 19, done. Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done. Writing objects: 100%
(19/19), 13.73 KiB, done. Total 23 (delta 6), reused 0 (delta 0) To
git@github.com:michaelliao/learngit.git
[new branch] master -> master Branch master set up to track remote branch master from origin.
把本地庫的內容推送到遠端,用git push命令,實際上是把當前分支master推送到遠端。
由於遠端庫是空的,我們第一次推送master分支時,加上了-u引數,Git不但會把本地的master分支內容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
從現在起,只要本地作了提交,就可以通過命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,現在,你就擁有了真正的分散式版本庫!
SSH警告
當你第一次使用Git的clone或者push命令連線GitHub時,會得到一個警告:
The authenticity of host `github.com (xx.xx.xx.xx)` can`t be
RSA key fingerprint is xx.xx.xx.xx.xx. Are you sure you
to continue connecting (yes/no)?
這是因為Git使用SSH連線,而SSH連線在第一次驗證GitHub伺服器的Key時,需要你確認GitHub的Key的指紋資訊是否真的來自GitHub的伺服器,輸入yes回車即可。
Git會輸出一個警告,告訴你已經把GitHub的Key新增到本機的一個信任列表裡了:
Warning: Permanently added `github.com` (RSA) to the list of known hosts.
從遠端庫克隆:
要克隆一個倉庫,首先必須知道倉庫的地址,然後使用git clone命令克隆。
Git支援多種協議,包括https,但通過ssh支援的原生git協議速度最快。
如何參與一個開源專案呢?比如人氣極高的bootstrap專案,這是一個非常強大的CSS框架,你可以訪問它的專案主頁https://github.com/twbs/bootstrap
,點“Fork”就在自己的賬號下克隆了一個bootstrap倉庫,然後,從自己的賬號下clone:
git clone git@github.com:michaelliao/bootstrap.git
一定要從自己的賬號下clone倉庫,這樣你才能推送修改。如果從bootstrap的作者的倉庫地址git@github.com:twbs/bootstrap.git克隆,因為沒有許可權,你將不能推送修改。
小結
在GitHub上,可以任意Fork開源倉庫;
自己擁有Fork後的倉庫的讀寫許可權;
可以推送pull request給官方倉庫來貢獻程式碼。在安裝Git一節中,我們已經配置了user.name和user.email,實際上,Git還有很多可配置項。比如,讓Git顯示顏色,會讓命令輸出看起來更醒目:
$ git config –global color.ui true
小結
忽略某些檔案時,需要編寫.gitignore;
.gitignore檔案本身要放到版本庫裡,並且可以對.gitignore做版本管理!
常見錯誤總結
如果輸入
$ git remote add origin
git@github.com:djqiang(github帳號名)/gitdemo(專案名).git
提示出錯資訊:
fatal: remote origin already exists.
解決辦法如下:
1、先輸入$ git remote rm origin
2、再輸入$ git remote add origin git@github.com:djqiang/gitdemo.git
就不會報錯了!
3、如果輸入$ git remote rm origin
還是報錯的話,
error: Could not remove config section `remote.origin`
. 我們需要修改gitconfig檔案的內容
4、找到你的github的安裝路徑,我的是
C:UsersASUSAppDataLocalGitHubPortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8etc
5、找到一個名為gitconfig的檔案,開啟它把裡面的[remote "origin"]
那一行刪掉就好了!
如果輸入$ ssh -T git@github.com
出現錯誤提示: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 origingit@github.com:djqiang/gitdemo.git
提示出錯資訊:
fatal: Unable to create `/path/my_proj/.git/index.lock`: File exists.
If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.
解決方法如下:
rm -f ./.git/index.lock
使用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 git@github.com:defnngj/hello-world.git > //連線遠端github專案
$ git push -u origin master //將本地專案更新到github專案上去
gitconfig配置檔案
Git有一個工具被稱為git config,它允許你獲得和設定配置變數;這些變數可以控制Git的外觀和操作的各個方面。這些變數可以被儲存在三個不同的位置:
1./etc/gitconfig 檔案:包含了適用於系統所有使用者和所有庫的值。如果你傳遞引數選項’–system’ 給 git config,它將明確的讀和寫這個檔案。
2.~/.gitconfig 檔案 :具體到你的使用者。你可以通過傳遞–global 選項使Git 讀或寫這個特定的檔案。
3.位於git目錄的config檔案 (也就是 .git/config) :無論你當前在用的庫是什麼,特定指向該單一的庫。每個級別重寫前一個級別的值。因此,在.git/config中的值覆蓋了在/etc/gitconfig中的同一個值。
在Windows系統中,Git在$HOME目錄中查詢.gitconfig檔案(對大多數人來說,位於C:Documents and Settings$USER下)。它也會查詢/etc/gitconfig,儘管它是相對於Msys 根目錄的。這可能是你在Windows中執行安裝程式時決定安裝Git的任何地方。
warning: LF will be replaced by CRLF
問題解決方法
windows中的換行符為 CRLF, 而在linux下的換行符為LF,所以在執行add . 時出現提示,解決辦法:
$ rm -rf .git
// 刪除.git$ git config --global core.autocrlf false
//禁用自動轉換 (兩個虛線)
然後重新執行:
$ git init
$ git add .
總結
當我們想要在gitub上的不同倉庫推送程式碼的時候,先在gitub新建repository,在本地新建資料夾,又可以被稱為work directory,cd directory,然後git init 為了防止 錯誤, 輸入$ git remote add origin git@github.com:xiaoxiongmila/gitdemo.git 就不會報錯了!git add demo git commit -m “demo說明” 接著 先輸入$ git pull origin master //先把遠端伺服器github上面的檔案拉下來
下一步,就可以把本地庫的所有內容推送到遠端庫上 $ git push -u origin master
把本地庫的內容推送到遠端,用git push命令,實際上是把當前分支master推送到遠端。
由於遠端庫是空的,我們第一次推送master分支時,加上了-u引數,Git不但會把本地的master分支內容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
從現在起,只要本地作了提交,就可以通過命令:
$ git push origin master
第二次往相同的倉庫裡面新增檔案,就直接cd directory git add directory git commit -m “檔案說明” git push origin master就可以了,,不管你行不行,反正我是行了^-^
PS: 遇到錯誤一定不要放棄,,堅持就是勝利!~~