A. Github常見操作和常見錯誤!
一、如果輸入$ git remote add origin [email protected] :djqiang(github帳號名)/gitdemo(項目名).git
解決辦法如下:
1、先輸入$ git remote rm origin
2、再輸入$ git remote add origin [email protected] :djqiang/gitdemo.git 就不會報錯了!
3、如果輸入$ git remote rm origin 還是報錯的話,error: Could not remove config section 'remote.origin'. 我們需要修改gitconfig文件的內容
4、找到你的github的安裝路徑,我的是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_\etc
5、找到一個名為gitconfig的文件,打開它把裡面的[remote "origin"]那一行刪掉就好了!
二、如果輸入$ ssh -T [email protected] 出現錯誤提示: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 origin [email protected] :djqiang/gitdemo.git
四、使用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 [email protected] :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的任何地方。
4.1當你安裝Git後首先要做的事情是設置你的用戶名稱和e-mail地址。這是非常重要的,因為每次Git提交都會使用該信息。它被永遠的嵌入到了你的提交中:$ git config --global user.name "John Doe"$ git config --global user.email [email protected]
4.2 你的編輯器(Your Editor)現在,你的標識已經設置,你可以配置你的預設文本編輯器,Git在需要你輸入一些消息時會使用該文本編輯器。預設情況下,Git使用你的系統的預設編輯器,這通常可能是vi 或者 vim。如果你想使用一個不同的文本編輯器,例如Emacs,你可以做如下操作:$ git config --global core.editor emacs
4.3 檢查你的設置(Checking Your Settings)如果你想檢查你的設置,你可以使用 git config --list 命令來列出Git可以在該處找到的所有的設置:$ git config --list 你也可以查看Git認為的一個特定的關鍵字目前的值,使用如下命令 git config {key}:$ git config user.name
4.4 獲取幫助(Getting help)如果當你在使用Git時需要幫助,有三種方法可以獲得任何git命令的手冊頁(manpage)幫助信息:$ git help <verb>$ git <verb> --help$ man git-<verb>例如,你可以運行如下命令獲取對config命令的手冊頁幫助:$ git help config
六、push到github時,每次都要輸入用戶名和密碼的問題
在github.com上 建立了一個小項目,可是在每次push 的時候,都要輸入用戶名和密碼,很是麻煩 原因是使用了https方式 push 在termail里邊 輸入 git remote -v 可以看到形如一下的返回結果
origin https://github.com/dengVictor/learngit.git (fetch)
origin https://github.com/dengVictor/learngit.git (push)
下面把它換成ssh方式的。
七、常用命令
假如你現在新創建了一個項目,想把它提交到github上面? 假設你創建好了一個項目,並切換到項目的根目錄下面:
$ git status //查看當前項目下所有文的狀態,如果第一次,你會發現都紅顏色的,因為它還沒有交給git/github管理。
$ git add . //(.)點表示當前目錄下的所有內容,交給git管理,也就是提交到了git的本地倉庫。 Ps:git的強大之處就是有一個本地倉庫的概念,在沒有網路的情況下可以先將更新的內容提交到本地倉庫。
$ git commit –m」discription 」 //對你更新或修改了哪些內容做一個描述。
$ git remote add origin [email protected] :xiahouzuoxin/zx-libsvm.git // 如果你是第一次提交項目,這一句非常重要,這是你本地的當前的項目與遠程的哪個倉庫建立連接。 Ps: origin可以改為別人的名字,但是在你下一次push(提交)時,也要用你修改之後的名字。
$ git remote -v //查看你當前項目遠程連接的是哪個倉庫地址。
$ git push -u origin master //將本地的項目提交到遠程倉庫中。 ------------------------------------------------------------ 假如,你回到了家,想把公司提交的項目克隆到本地? 如果你是第一次想把github上面的項目克隆到本地或者要克隆別人的項目到地。
$ git clone [email protected] :xiahouzuoxin/zx-libsvm.git //在git下面切換到想存放此項目的文件目錄下,運行這條命令就可以將項目克隆下來。
假如本地已經存在了這個項目,而倉庫中又有一新的更新,如何把更的合並到本地的項目中?
$ git fetch origin //取得遠程更新,這里可以看做是准備要取了
$ git merge origin/master //把更新的內容合並到本地分支/master ------------------------------------------- 項目中刪除了一些文件,如何提交? 假如遠程倉庫中已經存了aaa這個文件,我fetch了下來,並刪除了aaa這個文件,想再push上到遠程倉庫中,並使遠程倉庫中的項目被新的修改覆蓋(也就是遠程倉庫中 的aaa也被刪除)
$ git status //可以看到我們刪除的哪些文件
$ git add . //刪除之後的文件提交git管理。
$ git rm src/com/hzh/hibernate//aaa.java //移除我們刪除的那個文件,不然git不允許我們往遠程倉庫提交。 Ps: 如果你想刪除的是某個目錄(java包),這里想移除整個目錄的內容。
$ git rm src/com/hzh/hibernate/bbb/ -r // -r 會把bbb/目錄下的所有內容一次性移動。 ------------------------------------------------------------------------ 遠程創建了一個新倉庫,本地創建了一個新項目,如何使新的項目與倉庫對應起來? 其實,這個也很簡單,只是我當時對那些命令不太理解,所以比較模糊,不知如何對應。
$ git remote add origin [email protected] :xiahouzuoxin/zx-libsvm.git //還是這個命令,在你push項目之前加上這一句就OK了。 [email protected] :xiahouzuoxin/zx-libsvm.git 就是你常見的新倉庫的地址啊。git切換到新項目下,在push之前,加上這一句,我們創建的新倉庫就與新項目建立了連接。
B. 如何在github上搭建自己的博客
1.建立一個項目
先在GitHub創建一個項目,名字隨意,盡量全部小寫字母,避免隨後會碰到的URL沖突問題。
1.1 在自己github右上角上,點擊+號按鈕,在出現的菜單中選擇 New repository
1.2 進入到創建倉庫頁面,給倉庫命名並給於描述之後,點擊create repository按鈕創建倉庫
項目創建完畢。
2.安裝Git
git是一個免費的、分布式的版本控制工具,或是一個強調了速度快的源代碼管理工具。
git的安裝地址(http://msysgit.github.io/)
關於git的具體安裝步驟可參考http://jingyan..com/article/90895e0fb3495f64ed6b0b50.html
關於git的常用命令可參考http://www.bootcss.com/p/git-guide/
3.clone項目
本地運行Git,隨意選個目錄,將剛才創建的項目clone下來。
例:
cd /e/blog
git clone https://github.com/stxwd46/EX.github-io.git
cd EX.github-io
4.建立配置文件_config.yml
注意:之後建立的所有文檔務必使用UTF-8 無 BOM(隱藏字元) 的編碼保存
在項目的根目錄下打開git命令行界面,輸入命令 >> _config.yml 新建文件 _config.yml ,填寫 baseurl: /blogdemo , blogdemo是你的項目名稱,這一行內容規定了整個網站的根路徑。
例:
baseurl: /EX.github-io
目錄結構變為
/EX.github-io
|--_config.yml
5.建立主頁
在根目錄下新建文件 index.html , 內容如下:
---
title: Hello, My Blog
---
{{ page.title }}
每篇文章的頭部,必須有一個yaml文件頭,用來設置一些元數據。它用三根短劃線"---",標記開始和結束,裡面每一行設置一種元數據。"title: Hello, My Blog",表示該文章的標題是"Hello, My Blog",如果不設置這個值,默認使用嵌入文件名的標題,即"hello world"。
在yaml文件頭後面,就是文章的正式內容,{{}}這些是Liquid模板語言,在{{}}裡面我們可以使用模板變數。{{ page.title }} 表示「本頁面的標題」,因為我們前面設置了title為Hello, My Blog。所以到時候進入到博客首頁,title 就會顯示相應的文案。
目錄結構變成:
/EX.github-io
|--_config.yml
|-- index.html
6.在_posts內撰寫文章,並在首頁加入文章列表
現在首頁有了,那我們怎麼發博文上去呢?
回到項目根目錄, 打開git bash,運行 mkdir _posts 新建一個目錄,看名字也知道啦,這里存放你所有的文章。
進入_posts目錄,新建一篇文章。注意默認的文件名格式是 year-month-day-postTitle 這樣。比如 2015-05-05-my_first_article.md,盡量避免空格或者其他亂七八糟的字元,這個文件名將作為URL的生成依據。文件名的格式可以通過修改 _config.yml中的 permalink 屬性而改變,默認值為 date ,也就是我們剛剛創建的文件的樣子,具體的規則可以看這里。
如果你發現了我剛才創建的文件後綴名是 .md ,熟悉GitHub或者StackOverFlow的朋友應該知道Markdown 格式。對於不熟悉前端的人來說,用markdown可以避開HTML,轉而使用更加直觀的Markdown語法。如果不熟悉Markdown語法也沒關系,可以參見這份Markdown 語法說明,應該說是相當易學,並且在熟悉之後非常易用的。而作為一個前端開發者來講,我還是更傾向於用html。
回到主題,打開剛才創建的文件,輸入如下內容:
---
title: 我的第一篇文章
---
# {{ page.title }}
## 目錄
+ [第一部分](#partI)
+ [第二部分](#partII)
+ [第三部分](#partIII)
----------------------------------
## 第一部分
這里是第一部分的內容
----------------------------------
## 第二部分
這里是第二部分的內容
----------------------------------
## 第三部分
這里是第三部分的內容
{{ page.date|date_to_string }}
這段內容中使用了最常用的幾種Markdown語法,比如使用 # ,## 表示 HTML 中的 <h1></h1> , <h2></h2>。使用[text](link)創建超鏈接,使用 連續多個 - 創建水平線(注意:不包括最上端包圍title所使用的橫線,那裡表示一個頁面的「頭屬性」),等等。更多詳細的語法可以在之前提到的頁面查詢,這里不再贅述,總之,這是一種更加貼近真實寫作的語法,推薦大家嘗試。
頁面最後面的那個 {{ page.date|date_to_string }} 是指顯示本頁的日期屬性,並且轉換為可讀的字元串形式。同樣也是Liquid語法。
OK,第一篇文章就寫好了,然後到主頁給文章加上入口鏈接。
打開我們的 index.html 文件,添加內容,變成下面這樣:
---
title: My Blog
---
{{ page.title }}
{% for post in site.posts %}
{{ post.date|date_to_string }} <a href='{{ site.baseurl }}{{ post.url }}'>{{ post.title }}</a>
{% endfor %}
簡單解釋一下,Liquid標記最主要分為兩種,一種是直接輸出變數內容,像這樣:
{{ page.title }}
另一種則是邏輯命令形式的,像這樣:
{% for x in y %} ... {% endfor %}
而剛才寫進主頁的內容,就是遍歷所有post文件,然後逐一顯示在頁面上,這里需要注意的一點就是在創建文章的超鏈接時,除了 post.url 之外,也要注意在前面加上site.url ,原因前面也有提到過,我們正在創建的是 Project Pages 類型的網站,其最終生成的網址根目錄是:username.github.com/projectname,而 post.url 生成的超鏈接僅僅會自動加上 username.github.com/ 這樣的前綴。
現在檢查一下更改的所有內容,確認不要犯下愚蠢的錯誤,比如把 「.」 打成 「。「或者單詞拼錯之類的。
目錄結構變為
/EX.github-io
|--_config.yml
|-- index.html
|-- _posts
| |--2015-05-05-my_first_article.md
7.配置SSH keys
為什麼要配置ssh keys?因為github和本地代碼做推送和拉取時,需要用到ssh的密鑰對進行數據加解密,由於github上新建的項目沒有添加密鑰,所以本地倉庫連接不到遠程倉庫。
那麼如何配置ssh keys呢?
7.1 我們需要檢查你電腦上現有的ssh key:
cd ~/.ssh
如果提示:No such file or directory 說明你是第一次使用git。
7.2 生成新的ssh keys:
ssh-keygen -t rsa -C "郵件地址@youremail.com"
注意1: 此處的郵箱地址,你可以輸入自己的郵箱地址;注意2: 此處的「-C」的是大寫的「C」。
按回車後出現
再按一次回車即可。
然後系統會要你輸入密碼:
Enter passphrase (empty for no passphrase):<輸入加密串>
Enter same passphrase again:<再次輸入加密串>
在回車中會提示你輸入一個密碼,這個密碼會在你提交項目時使用,如果為空的話提交項目時則不用輸入。這個設置是防止別人往你的項目里提交內容。
注意:輸入密碼的時候沒有*字樣的,你直接輸入就可以了。
最後看到這樣的界面,就成功設置ssh key了:
7.3 添加ssh key到GitHub
在本機設置SSH Key之後,需要添加到GitHub上,以完成SSH鏈接的設置。
1、打開本地C:\Documents and Settings\Administrator.ssh\id_rsa.pub文件。此文件裡面內容為剛才生成人密鑰。如果看不到這個文件,你需要設置顯示隱藏文件。准確的復制這個文件的內容,才能保證設置的成功。
2、登錄你的GitHub個人主頁。點擊右上角的 Settings進入設置頁面,然後點擊SSH Keys頁面中的Add SSH key按鈕
3、把你本地生成的密鑰復制到裡面(key文本框中), 點擊 add key 就ok了
8.發布到GitHub
這個時候我們就可以把頁面提交到github上了,到根目錄打開git命令行界面
8.1 把剛創建的所有文件添加到本地git庫
git add -A
8.2 保持良好的習慣,每次提交都提交添加描述
git commit -m "create my blog"
8.3 推送到GitHub,這里注意,因為我們使用的是GitHub Pages中的 Project Pages,GitHub規定,只有該分支中的頁面,才會生成網頁文件。即GitHub僅會將分支 gh-pages 下的內容進行自動生成操作, 所以本地的 master 分支應推送到遠端的 gh-pages 分支
git push origin master:gh-pages
輸入賬號和密碼,賬號即你的GitHub賬號(不是昵稱,是賬號名!),輸入密碼的時候命令行界面不會有任何的變化,所以在輸入密碼的時候要謹慎小心。之後按回車即可。
好了,那現在我們要如何查看我們的博客頁面呢。打開GitHub,進入到自己博客的倉庫,右側菜單欄有一個setting選項
點擊進入之後會看到這個頁面
GitHub Pages中顯示的鏈接就是你的博客地址啦。
9.增加模板套裝_layouts
其實到第8步博客的構建就已經完成了,只是沒有樣式的博客實在太難看。GitHub Pages有提供一些主題給我們使用。但作為一個前端開發者,肯定更希望自己給自己的博客布局和創建樣式。
回到項目根目錄,新建文件夾 _layouts,顧名思義,「布局」是也。在 _layouts 中新建一個最基本的布局文件,姑且命名為default.html好了:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>{{ page.title }}</title>
</head>
<body>
{{ content }}
</body>
</html>
首先,charset=utf-8讓我們一勞永逸地解決了UTF-8的編碼問題,隨後指定了正文內容的位置,當然在這里只是一個最簡單的內容,在body內僅有一個 {{ content }} 標簽,你可以根據自己的喜好對頁面進行任何改動,只要記得保留這個內容標簽在你想要的位置就好。
然後我們修改index.html和剛寫完的那篇文章,只要在頭屬性上加一句就好:
---
title: xxoo
layout: default.html
---
我們當然還可以把這個結構變得更靈活一些,比如繼續新增兩個模板分別叫做l_post.html與l_index.html,他們首先引用default.html,但在其基礎上做出一定的修改。然後首頁使用l_index模板,而所有的post文件則使用l_post模板,等等等等,請隨意發揮。但始終記得加上 {{ content }} 標簽
目錄結構變為
/EX.github-io
|--_config.yml
|-- index.html
|-- _posts
| |--2015-05-05-my_first_article.md
|-- _layouts
| |--default.html
再次推送到GitHub即可。
這樣,我們就已經構建好了一個最簡單的blog。之後你們就可以開始為自己的博客添磚加瓦了。
10.問題匯總
10.1 推送到GitHub之後個人主頁的contributions沒有提交記錄
Git會根據用戶的名字和郵箱來記錄提交。GitHub也是用這些信息來做許可權的處理,輸入下面的代碼進行個人信息的設置,把名稱和郵箱替換成你自己的。
如何查看自己的名稱和郵箱呢。回到GitHub個人主頁,點擊右上角的setting圖標
進入之後Personal settings菜單欄下的Profile頁面中,Name即為你的名字
但郵箱不是Name下面的Public email,很多人在這里被誤導了。郵箱是Emails頁面中的郵箱地址
知道了名字和郵箱之後,打開git命令行界面,通過下面的命令行來設置你的名字和郵箱
git config --global user.name "cnfeat"//用戶名
git config --global user.email "[email protected]"//填寫自己的郵箱
設置正確之後,提交記錄就都恢復了。不僅僅你以後提交的都會出現在提交記錄中,你以前提交的也會恢復並出現在記錄中。
10.2 每次提交都要求你輸入賬號跟密碼
原因是我們在clone分支時使用了 HTTPS 的地址,
HTTPS 的地址是做什麼用的呢?其實它主要是用在一些防火牆或者代理伺服器設置比較嚴格的情況下的,比如有些公司是禁止使用 SSH 連接外網,那麼在這種情況下要想使用 Git 的話,就只能用 HTTPS 的方式了。
使用 HTTPS 的方式,也有儲存密碼的方式,但我們首推的方式是切換到 SSH,如果你的網路環境支持的話。
回到你博客的根目錄。打開git命令行界面,輸入
git remote set-url 你博客的ssh url
如果你不知道你博客的ssh url,打開你的博客項目,右下角選擇SSH,然後復制框里的url就行了
之後再提交就不會要求你輸入賬號密碼了。
10.3 頁面調試不方便
如果我們要給我們的博客布局或設置樣式神馬的,我們是否每次都要把代碼寫好然後推送到GitHub上,再打開自己的博客地址,看看布局有沒有什麼問題。如果有的話再改代碼,再提交,再查看呢?
C. Git 中 6 個基本常用命令
大家好啊,我是大田。
想更深刻了解 Git 常用命令,先來看看原理圖:
我們使用 Git 操作的核心步驟就是:
先add代碼到git緩存
然後commit到git本地倉庫
最後push到遠程Github代碼倉庫
備註:
workspace:當前工作區,需要經過 add、commit、push 才能上傳到遠程倉庫
index:緩存區,標仔鎮記你本地的哪些內容是被 git 管理的
repository:本地倉庫,保存各個版本的提交
remote:遠程倉庫
1、克隆遠程項目到本地
git clone url
2、克隆後,創建新分支,名字叫 dev
git checkout -b dev
3、加到緩存區
1)git add .:添加所有項目至緩存區
2)git add 目錄名:添加指定目錄腔陸到緩存區
3)git add 文件名:添加指定文件到緩存區
4、提交至本地倉庫
git commit -m "注釋信息"
5、推送本地倉庫信息至遠程倉庫
git push origin master:將本地分支的更新內容,全部推送至遠程倉庫 master 分支
git push origin dev:將本地 dev 分支推送到遠程,再由一個人統一加到 master 分念圓粗支上
6、拉取遠程倉庫最新文件
git pull:拉取遠程倉庫所有分支合並到本地
git pull origin master:拉取遠程master分支,合並到當前本地master分支
git fetch:僅做拉取操作,不做合並,合並需要自己再找其他方法
備註:一般都用 git pull
D. Git常用命令
1.1 配置環境
當安裝Git後首先要做的事情是設置用戶名稱和email地址。這是非常重要的,因為每次Git提交都會使用該用戶信息。該用戶信息和GitHub上注冊的遠程倉庫的相關信息沒有任何關系。
git config --global user.name "你的名字"
git config --global user.email "你的郵箱"
git config --list
配置信息保存在用戶目錄下的.giitconfig文件中
1.2 獲取Git倉庫
要使用Git對我們的代碼進行版本控制,首先需要獲得Git倉庫
獲取Git倉庫通常有兩種方式:
執行步驟如下:
1、在電腦的任意位置創建一個空目錄作為我們的本地Git倉庫
2、進入這個目錄中,點擊右鍵打開Git bash 窗口
3、執行命令git init
可以通過Git提供的命令從遠程倉庫進行克隆,將遠程倉庫克隆到本地的命令形式為:
git clone 遠程Git倉庫地址
1.3 工作目錄、暫存區以及版本庫概念
版本庫:.git隱藏文件就是版本庫,版本庫存儲了很多配置信息、日誌信息和文件版本信息等
工作目錄(工作區):包含.git文件夾的目錄就是工作目錄,主要用於存放開發的代碼
暫存區:.git文件夾中有很多文件,其中一個index文件就是暫存區,也可以叫做stage。暫存區是一個臨時保存修改文件的地方
1.4 Git工作目錄下文件的兩種狀態
Git工作目錄下的文件存在兩種狀態:
Unmodified 未修改狀態
Modified 已修改狀態
Staged 已暫存狀態
這些文件的狀態會隨著我們執行Git的命令發生變化
1.5 本地倉庫操作
git status 查看文件狀態
也可以使用git status -s使輸出信息更簡潔
git add 將未跟蹤的文件加入暫存區,將已經修改的文件加入暫存區也是通過這個命令
git reset 將暫存區文件取消暫存
git commit -m 「你的說明」 將暫存區文件提交到本地倉庫
git rm 刪除文件 說明:這種操作是直接將文件加入到暫存區裡面,直接提交到本地倉庫生效,而直接刪除的話沒有進入到暫存區,需要先把文件加入到暫存區之後,再提交到本地倉庫。
將文件添加至忽略列表
一般我們總會有些文件無需納入Git的管理,也不希望他們總出現在未跟蹤文件列表。通常這些都是自動生成的文件,比如日誌文件,或者編譯過程中創建的臨時文件等。在這種情況下,我們可以在工作目錄中創建一個名為.gitnore的文件(文件名稱固定),列出忽略的文件模式。下面是一個示例:#代表注釋
由於windows無法創建不含文件名的文件,因此我們需要在bash窗口中用如下命令創建。
git log 查看日記記錄
1.6 遠程倉庫操作
如果想查看已經配置的遠程倉庫伺服器,可以運行git remote 命令。它會列出指定的每一個遠程伺服器的簡寫。如果已經克隆了遠程倉庫,那麼至少可以看見origin,這是Git克隆的倉庫伺服器的默認名字
git remote -v 可以查看對遠程倉庫詳細一點的說明
git remote show origin 可以查看對origin更詳細的遠程倉庫的說明
運行git remote add 添加一個遠程Git倉庫,同時指定一個可以引用的簡寫
如果你想獲得一份已經存在了的Git倉庫的拷貝,這時需要用到 git clone 命令。Git克隆的是Git倉庫伺服器上的幾乎所有數據(包括日誌信息、 歷史 記錄等),而不僅僅是復制工作所需要的文件。當你執行git clone 命令的時候,默認配置下Git倉庫中的每一個文件的每一個版本都將被拉取下來。
如果因為一些原因想要移除一個遠程倉庫,可以使用git remote rm
注意:此命令只是從本地移除遠程倉庫的記錄,並不會影響到遠程倉庫
git fetch 是從遠程倉庫獲取最新版本到本地倉庫,不會自動merge
說明:如果使用fetch命令,拉取的文件會放到版本庫裡面,不會自動整合到工作區,如果需要整合到工作區,需要使用 git merge 遠程倉庫別名/遠程倉庫分支
git pull 是從遠程倉庫獲取最新版本並merge到本地倉庫
注意:如果本地倉庫不是從遠程倉庫克隆,而是本地創建的倉庫,並且倉庫中存在文件,此時再從遠程倉庫中拉取文件的時候會報錯(fatal:refusing to merge unrelated histories),解決此我呢提可以在git pull 命令後加入參數 --allow-unrelated-histories
git push
1.7 Git分支
幾乎所有的版本控制系統都是以某種形式支持分支。使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線。Git的master是一個特殊分支。它跟其它分支沒有區別。之所以每一個倉庫都有mater分支,是因為git init默認創建它,並且大多數人都懶得去改動它。
# 列出所有本地分支
$ git branch
#列出所有遠程分支
$ git branch -r
#列出所有本地分支和遠程分支
$git branch -a
git branch 分支名稱
git checkout 分支名稱
git push 遠程倉庫別名 遠程倉庫分支
git merge 分支名稱 說明:在當前分支下合並其他分支
注意:如果兩個分支存在同樣的文件名且同行的內容不一樣,那麼會產生矛盾,需要自己手動修改產生矛盾後的文件,然後添加到暫存區然後提交。
git branch -d 分支名稱
如果要刪除的分支中進行了一些開發動作,此時執行上面的刪除命令並不會刪除分支,可以將命令中的-d參數改為-D
如果要刪除遠程倉庫中的分支,可以使用命令git push origin -d branchName
1.8 Git標簽
像其他版本控制系統一樣,Git可以給 歷史 中的某一給提交打上標簽,以示重要。比較有代表性的是人們會使用這個功能來標記發布結點(v1.0、v1.2等)。標簽指的是某個分支某個特定時間點的狀態。通過標簽,可以很方便地切換到標記時的狀態。
#新建一個tag
$ git tag [tagName]
$ git tag
#新建一個分支,指向某個tag
$ git checkout -b [branch] [tag]
#刪除本地tag
$git tag -d[tag]
#刪除遠程tag
$git push origin :refs/tags/[tag]
E. git mv命令如何使用
git 命令 (gnu interactive tools)
功能說明:文字模式下的文件管理員。
語 法:git 命令
補充說明:git命令是用來管理文件的程序,它十分類似DOS下的Norton Commander,具有互動式操作界面。它的操作方法和Norton Commander幾乎一樣,略訴如下:
F1 :執行info指令,查詢指令相關信息,會要求您輸入欲查詢的名稱。
F2 :執行cat指令,列出文件內容。
F3 :執行gitview指令,觀看文件內容。
F4 :執行vi指令,編輯文件內容。
F5 :執行cp指令,復制文件或目錄,會要求您輸入目標文件或目錄。
F6 :執行mv指令,移動文件或目錄,或是更改其名稱,會要求您輸入目標文件或目錄。
F7 :執行mkdir指令,建立目錄。
F8 :執行rm指令,刪除文件或目錄。
F9 :執行make指令,批處理執行指令或編譯程序時,會要求您輸入相關命令。
F10 :離開git文件管理員。
----------------- Git命令具體使用-------------------------------
Git是一個分布式的版本控制工具,本篇文章從介紹Git開始,重點在於介紹Git的基本命令和使用技巧,讓你嘗試使用Git的同時,體驗到原來一個版本控制工具可以對開發產生如此之多的影響,文章分為兩部分:
第一部分,介紹Git的一些常用命令,其中穿插介紹Git的基本概念和原理
第二部分,重點介紹Git的使用技巧,最後會在Git Hub上創建一個開源項目開啟你的Git實戰之旅
Git是什麼
Git 在Wikipedia上的定義:它是一個免費的、分布式的版本控制工具,或是一個強調了速度快的源代碼管理工具。
Git 最初被Linus Torvalds開發出來用於管理Linux內核的開發。每一個Git的工作目錄都是一個完全獨立的代碼庫,並擁有完整的歷史記錄和版本追蹤能力,不依賴於網路和中心伺服器。
Git 的出現減輕了許多開發者和開源項目對於管理分支代碼的壓力,由於對分支的良好控制,更鼓勵開發者對自己感興趣的項目做出貢獻。其實許多開源項目包括 Linux kernel、Samba、X.org Server、Ruby on Rails,都已經過渡到使用Git作為自己的版本控制工具。對於我們這些喜歡寫代碼的開發者嘛,有兩點最大的好處,我們可以在任何地點(在上班的地鐵 上)提交自己的代碼和查看代碼版本;我們可以開許許多多個分支來實踐我們的想法,而合並這些分支的開銷幾乎可以忽略不計。
Git 1+1
現在進入本篇文章真正的主題,介紹一下Git的基本命令和操作,會從Git的版本庫的初始化,基本操作和獨有的常用命令三部分著手,讓大家能夠開始使用Git。
Git 通常有兩種方式來進行初始化:
git clone: 這是較為簡單的一種初始化方式,當你已經有一個遠程的Git版本庫,只需要在本地克隆一份
例如:git clone git://github.com/someone/some_project.git some_project
上面的命令就是將'git://github.com/someone/some_project.git'這個URL地址的遠程版本庫完全克隆到本地some_project目錄下面
git init和git remote:這種方式稍微復雜一些,當你本地創建了一個工作目錄,你可以進入這個目錄,使用'git init'命令進行初始化,Git以後就會對該目錄下的文件進行版本控制,這時候如果你需要將它放到遠程伺服器上,可以在遠程伺服器上創建一個目錄,並把 可訪問的URL記錄下來,此時你就可以利用'git remote add'命令來增加一個遠程伺服器端,
例如:git remote add origin git://github.com/someone/another_project.git
上面的命令就會增加URL地址為'git: //github.com/someone/another_project.git',名稱為origin的遠程伺服器,以後提交代碼的時候只需要使用 origin別名即可
Git 的基本命令
現在我們有了本地和遠程的版本庫,讓我們來試著用用Git的基本命令:
git pull:從其他的版本庫(既可以是遠程的也可以是本地的)將代碼更新到本地,例如:'git pull origin master'就是將origin這個版本庫的代碼更新到本地的master主枝,該功能類似於SVN的update
git add:是 將當前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示記入了版本歷史中,這也是提交之前所需要執行的一步,例如'git add app/model/user.rb'就會增加app/model/user.rb文件到Git的索引中,該功能類似於SVN的add
git rm:從當前的工作空間中和索引中刪除文件,例如'git rm app/model/user.rb',該功能類似於SVN的rm、del
git commit:提交當前工作空間的修改內容,類似於SVN的commit命令,例如'git commit -m story #3, add user model',提交的時候必須用-m來輸入一條提交信息,該功能類似於SVN的commit
git push:將本地commit的代碼更新到遠程版本庫中,例如'git push origin'就會將本地的代碼更新到名為orgin的遠程版本庫中
git log:查看歷史日誌,該功能類似於SVN的log
git revert:還原一個版本的修改,必須提供一個具體的Git版本號,例如'git revert ',Git的版本號都是生成的一個哈希值
上面的命令幾乎都是每個版本控制工具所公有的,下面就開始嘗試一下Git獨有的一些命令:
git branch:對分支的增、刪、查等操作,例如'git branch new_branch'會從當前的工作版本創建一個叫做new_branch的新分支,'git branch -D new_branch'就會強制刪除叫做new_branch的分支,'git branch'就會列出本地所有的分支
git checkout:Git的checkout有兩個作用,其一是在不同的branch之間進行切換,例如'git checkout new_branch'就會切換到new_branch的分支上去;另一個功能是還原代碼的作用,例如'git checkout app/model/user.rb'就會將user.rb文件從上一個已提交的版本中更新回來,未提交的內容全部會回滾
git rebase:用下面兩幅圖解釋會比較清楚一些,rebase命令執行後,實際上是將分支點從C移到了G,這樣分支也就具有了從C到G的功能
git reset:將當前的工作目錄完全回滾到指定的版本號,假設如下圖,我們有A-G五次提交的版本,其中C的版本號是 ,我們執行了'git reset '那麼結果就只剩下了A-C三個提交的版本
git stash:將當前未提交的工作存入Git工作棧中,時機成熟的時候再應用回來,這里暫時提一下這個命令的用法,後面在技巧篇會重點講解
git config:利用這個命令可以新增、更改Git的各種設置,例如'git config branch.master.remote origin'就將master的遠程版本庫設置為別名叫做origin版本庫,後面在技巧篇會利用這個命令個性化設置你的Git,為你打造獨一無二的 Git
git tag:可以將某個具體的版本打上一個標簽,這樣你就不需要記憶復雜的版本號哈希值了,例如你可以使用'git tag revert_version '來標記這個被你還原的版本,那麼以後你想查看該版本時,就可以使用 revert_version標簽名,而不是哈希值了
Git 之所以能夠提供方便的本地分支等特性,是與它的文件存儲機制有關的。Git存儲版本控制信息時使用它自己定義的一套文件系統存儲機制,在代碼根目錄下有一個.git文件夾,會有如下這樣的目錄結構:
有 幾個比較重要的文件和目錄需要解釋一下:HEAD文件存放根節點的信息,其實目錄結構就表示一個樹型結構,Git採用這種樹形結構來存儲版本信息,那麼 HEAD就表示根;refs目錄存儲了你在當前版本控制目錄下的各種不同引用(引用指的是你本地和遠程所用到的各個樹分支的信息),它有heads、 remotes、stash、tags四個子目錄,分別存儲對不同的根、遠程版本庫、Git棧和標簽的四種引用,你可以通過命令'git show-ref'更清晰地查看引用信息;logs目錄根據不同的引用存儲了日誌信息。因此,Git只需要代碼根目錄下的這一個.git目錄就可以記錄完 整的版本控制信息,而不是像SVN那樣根目錄和子目錄下都有.svn目錄。那麼下面就來看一下Git與SVN的區別吧
Git與SVN的不同
SVN(Subversion)是當前使用最多的版本控制工具。與它相比較,Git 最大的優勢在於兩點:易於本地增加分支和分布式的特性。
下面兩幅圖可以形象的展示Git與SVN的不同之處
------------
對 於易於本地增加分支,圖中Git本地和伺服器端結構都很靈活,所有版本都存儲在一個目錄中,你只需要進行分支的切換即可達到在某個分支工作的效果。而 SVN則完全不同,如果你需要在本地試驗一些自己的代碼,只能本地維護多個不同的拷貝,每個拷貝對應一個SVN伺服器地址。舉一個實際的例子,以前我所在 的小組使用SVN作為版本控制工具,當我正在試圖增強一個模塊,工作做到一半,由於會改變原模塊的行為導致代碼伺服器上許多測試的失敗,所以並沒有提交代 碼。這時候上級對我說,現在有一個很緊急的Bug需要處理, 必須在兩個小時內完成。我只好將本地的所有修改diff,並輸出成為一個patch文 件,然後回滾有關當前任務的所有代碼,再開始修改Bug的任務,等到修改好後,在將patch應用回來。前前後後要完成多個繁瑣的步驟,這還不計中間代碼 發生沖突所要進行的工作量。可是如果使用Git, 我們只需要開一個分支或者轉回到主分支上,就可以隨時開始Bug修改的任務,完成之後,只要切換到原來的分支就可以優雅的繼續以前的任務。只要你願意,每 一個新的任務都可以開一個分支,完成後,再將它合並到主分支上,輕松而優雅。
分布式對於Git而言,你可以本地提交代碼,所以在上面的圖 中,Git有利於將一個大任務分解,進行本地的多次提交,而SVN只能在本地進行大量的一次性更改,導致將來合並到主幹上造成巨大的風險。Git的代碼日 志是在本地的,可以隨時查看。SVN的日誌在伺服器上的,每次查看日誌需要先從伺服器上下載下來。我工作的小組,代碼伺服器在美國,每次查看小組幾年前所 做的工作時,日誌下載就需要十分鍾,這不能不說是一個痛苦。後來我們遷移到Git上,利用Git日誌在本地的特性,我用Ruby編寫了一個Rake腳本, 可以查看某個具體任務的所有代碼歷史,每次只需要幾秒鍾,大大方便我的工作。當然分布式並不是說用了Git就不需要一個代碼中心伺服器,如果你工作在一個 團隊里,還是需要一個伺服器來保存所有的代碼的。
總結
本篇介紹了Git的基本概念、一些常用命令和原理,大家可以嘗試動手體會一下,下一篇會重點介紹Git命令的使用技巧,Git附帶的工具,最後會在Git Hub上創建一個開源項目,敬請期待
F. 新手該如何使用GitHub
建議到git的官網看教程,官網的Documentaion有一個中文翻譯版的電子書籍,內容很詳細。如果願意系統學習推薦看官網的這本書。
當然安裝一個git軟體是必須的,軟體安裝完成後,使用git config命令配置你所要推送倉庫的用戶名和Email,這是為了遠程倉庫區分人員用的。
其實對於新手個人開發者來說,git中常用的就幾個命令:
首先,在工程目錄中執行git init命令。
接著,git add命令 將你要跟蹤的文件添加到跟蹤索引中
第三,使用git remote add 命令添加遠程倉庫(這里需要先在github上新建一個倉庫,其實新建完畢後,github網站會有個簡單提示教你如何推送。建議使用https方式,簡單方便。)
第四,使用git commit -m "提交信息" 命令將你跟蹤的文件提交到本地倉庫
到這里,其實已經可以滿足日常開發使用了,在開發過程中重復git add、git commit這兩個命令,就可以在本地建立一個版本庫,隨時可以從本地恢復到開發過程中的某個時刻。當然,如果需要在多個主機上協同開發,或者只是為了做個備份,那就將本地倉庫數據推送到遠程伺服器。也就是第三步添加的遠程倉庫。
將本地倉庫推送到遠程伺服器的命令是git push -u 。
這樣你就完成了一個基礎的git倉庫配置建立推送的過程。