Github使用方法及常見錯誤

xiaoxiongmila發表於2016-01-16

第一步:當然是先安裝

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

  1. RSA key fingerprint is xx.xx.xx.xx.xx. Are you sure you

  2. 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: 遇到錯誤一定不要放棄,,堅持就是勝利!~~

相關文章