1. git:版本控制工具php
git是一個開源的分佈式版本控制系統,用以有效、高速的處理從很小到很是大的項目版本管理。html
git學習書籍:https://git-scm.com/book/en/v2 (英文版)、https://git-scm.com/book/zh/v2 (中文版)vue
2. github:一個網站python
提供給用戶空間建立git倉儲,保存用戶的一些數據文檔或者代碼等。linux
3. gitlab:基於git的項目管理軟件git
gitLab 是一個用於倉庫管理系統的開源項目。使用git做爲代碼管理工具,並在此基礎上搭建起來的web服務。github
是一個基於git實現的在線代碼倉儲軟件,你能夠用gitlab本身搭建一個相似於github同樣的系統,通常用於在企業、學校等內部網絡搭建git私服。----github中私服收費。
web
Git是一個開源的分佈式版本控制系統,能夠有效、高速的處理從很小到很是大的項目版本管理。Git 是 Linus Torvalds爲了幫助管理Linux內核開發而開發的一個開放源碼的版本控制軟件。算法
Git是用於Linux內核開發的版本控制工具。與經常使用的版本控制工具CVS,Subversion等不一樣,它採用了分佈式版本庫的方式,沒必要服務器端軟件支持,(wingeddevil注:這得分是用什麼樣的服務端,使用http協議或者git協議等不太同樣,而且在push和pull的時候和服務器端仍是有交互的。)使源代碼的發佈和交流極其方便。Git的速度很快,這對於諸如Linux kernel這樣的大項目來講天然很重要。Git最爲出色的是它的合併跟蹤(merge tracing)能力。npm
Git是一種免費的開源分佈式版本控制系統,既能夠處理單個的小項目,也能夠處理龐大的企業項目。它極其輕便,專一於速度和處理分佈式項目。它脫胎於Linux內核開發,該公司的GitHub網站對開源項目來講是一個很是流行的軟件庫。
相關連接:https://git-scm.com/
克隆(clone):從遠程倉庫URL加載建立一個與遠程倉庫同樣的本地倉庫
提交(commit):將暫存文件上傳到本地倉庫(咱們在Finder中對本地倉庫作修改後通常都得先提交一次,再推送)
檢出(checkout):切換不一樣分支
添加(add):添加文件到緩存區
移除(remove):移除文件至緩存區
暫存(git stash):保存工做現場
重置(reset):回到最近添加(add)/提交(commit)狀態
合併(merge):將多個同名文件合併爲一個文件,該文件包含多個同名文件的全部內容,相同內容抵消
抓取(fetch):從遠程倉庫獲取信息並同步至本地倉庫
拉取(pull):從遠程倉庫獲取信息並同步至本地倉庫,而且自動執行合併(merge)操做,即 pull=fetch+merge
推送(push):將本地倉庫同步至遠程倉庫,通常推送(push)前先拉取(pull)一次,確保一致
分支(branch):建立/修改/刪除分枝
標籤(tag):給項目增添標籤
工做流(Git Flow):團隊工做時,每一個人建立屬於本身的分枝(branch),肯定無誤後提交到master分枝
終端(terminal):能夠輸入git命令行
一、GitHub若是要使用私有倉庫,是須要付費的 GitLab能夠在上面建立私人的克費倉庫
二、GitLab讓開發團隊對他們的代碼倉庫擁有更多的控制,相比於GitHub,它有很多的特點 :
容許克費設置倉庫權限;
容許用戶選擇分享一個project的部分代碼
容許用戶設置project的獲取權限,進一步的提高安全性
能夠設置獲取到團隊總體的改進進度;經過 innersourcing讓不在權限範圍內的人訪問不到該資源
總結 :從代碼私有性方面來看,有時公司並不但願員工獲取到所有的代碼,這個時候GitLab無疑是更好的選擇但對於開源項目而言,GitHub依然是代碼託管的首選
git相關概念 :
git 是一種版本控制系統,是一個命令,是一種工具
gitlib 是用於實現git功能的開發庫
github 是一個基於git實現的在線代碼託管倉庫,包含一個網站界面,向互聯網開放
gitlab 是一個基於git實現的在線代碼倉庫託管軟件,通常用於在企業內部網絡搭建git私服
gitlab-ce 社區版(免費)
gitlab-ee是企業版(收費)
gitlab搭建成功
gitlab主配置文件:/etc/gitlab/gitlab.rb # 能夠自定義一些郵件服務等
日誌目錄:/var/log/gitlab/ # 對應各服務
服務目錄:/var/opt/gitlab/ # 對應各服務的主目錄
倉庫目錄:/var/opt/gitlab/git-data # 記錄項目倉庫等提交信息
重啓服務:gitlab-ctl stop/start/restart # 啓動命令
工做區:就是你在電腦裏能看到的目錄。
版本庫:工做區有一個隱藏目錄.git,,而是Git的版本庫。
暫存區:英文叫stage, 或index。通常存.git/index中,因此咱們把暫存區有時也叫做索引(index)。
HEAD:指向 master 分支的一個"遊標"
objects:位於 ".git/objects" 目錄下,裏面包含了建立的各類對象及內容。
git add:暫存區的目錄樹被更新,同時工做區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。
git commit:當執行提交操做時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會作相應的更新。
git reset HEAD:取消已緩存的內容,可是工做區不受影響。
git rm --cached <file>:會直接從暫存區刪除文件,工做區則不作出改變。
git checkout ." 或者 "git checkout -- <file>":會用暫存區所有或指定的文件替換工做區的文件。這個操做很危險,會清除工做區中未添加到暫存區的改動。
git checkout HEAD ." 或者 "git checkout HEAD <file>" :會用 HEAD 指向的 master 分支中的所有或者部分文件替換暫存區和以及工做區中的文件。這個命令也是極具危險性的,由於不但會清除工做區中未提交的改動,也會清除暫存區中未提交的改動。
1. git init
在GitHub項目初始化以前 ,數據已經存在於本地倉庫中 ,可經過切換到該倉庫位置後經過 git init 進行初始化 ,只有進行了此操做 ,後邊的操做纔有意義 。初始化後會生成一個 .git 文件夾 ,不要輕易動 。
2. git status
顧名思義 ,此語法能夠查看當前狀態 ,像我本身學習的時候就喜歡動不動 git status 下 ,查看當前狀態 ,也能避免沒必要要的錯誤 。
3. git add
用於將指定文件提交到「緩衝區」 ,git add . 即將修改過的全部文件提交到「緩衝區」 。
4.git commit
git add 或一些命令後 ,若是執行 git status 會提示你有文件能夠 commit ,提交便可 ,例如 git commit -m"" 。
5.git push
commit 以後 ,最終提交到遠程倉庫須要經過 push 指令實現 。git push -u origin master 。
紙上得來終覺淺 ,絕知此事要躬行 。下邊就以 leetcode 代碼爲例實戰下吧 。
git 簡單實戰 。
1.首先若是沒有 GitHub 帳號 ,固然是要去註冊一個啦 ,用戶名和郵箱名都記住 。
2.本地配置用戶名與郵箱(設置好的跳過此環節)。
git config --global user.name "你的用戶名"
git config --global user.email "你的郵箱"
如圖所示 :
3.生成 ssh key
運行 ssh-keygen -t rsa -C "你的郵箱"
會提示你輸入 ,能夠直接回車 ,理論上會有 3 次回車輸入 。(這裏寫此文時以配置好 ,提示是否覆蓋)
4.到上述路徑下打開該文件並複製其中內容(ssh key)。
5.打開 GitHub 並進入 settings ,點擊 SSH and GPG keys ,將上面複製的內容粘貼到 key 中便可 。以後點擊 Add SSH key便可 。
6.能夠在 git 窗口執行 ssh -T git@github.com ,查看是否配置成功 。
建li遠程倉庫並關聯本地 。
這裏就以 leetcode 的代碼倉庫爲例 。
1.首先創建遠程倉庫 (由於小詹已經事先用了LeetCode名字 ,這裏你們能夠忽略下圖的報錯)
2.接下來就以當前狀態 ,上傳第 18 題和刪除第 18 題爲例 ,介紹如何上傳 、刪除遠程倉庫內容 。
首先 ,咱們經過 cd 切換到本地倉庫的文件位置 。並經過git init將該位置格式爲倉庫 。這裏小詹以前已經git init過了 ,因此切換到該路徑後面會有個master 。
以後 ,在本地倉庫更新倉庫內容 ,小詹的遠程倉庫如今沒有 leetcode 18題 ,本地倉庫存在 ,因此接下來將該新增的第18題文件夾上傳到遠程倉庫 。
咱們平時要學會是否是 git status 下 ,看看當前狀態 ,以後利用 git add 指令將要上傳的文件 add 到「緩衝區」 (能夠 git status查看下狀態 ,熟悉這個過程),以後利用 git commit 提交 ,最後 push 便可完成目標文件夾的上傳 。整個過程以下 :
執行後從新進入遠程倉庫會發現多了一個文件夾 ,就是剛上傳的那個 。
接下來 ,若是咱們不當心上傳錯了文件夾 ,如何刪除呢 ?
以剛上傳的 018.4sum 文件夾爲例 ,能夠經過 3 行簡單的代碼刪除 ,具體以下 :
接下來 ,若是咱們不當心上傳錯了文件夾 ,如何刪除呢 ?
以剛上傳的 018.4sum 文件夾爲例 ,能夠經過 3 行簡單的代碼刪除 ,具體以下 :
執行完以後 ,遠程倉庫的對應文件即被刪除了 。
· /etc/gitconfig 文件:系統中對全部用戶都廣泛適用的配置。若使用 git config 時用 --system 選項,讀寫的就是這個文件。
· ~/.gitconfig 文件:用戶目錄下的配置文件只適用於該用戶。若使用 git config 時用 --global 選項,讀寫的就是這個文件。
· 當前項目的 Git 目錄中的配置文件(也就是工做目錄中的 .git/config 文件):這裏的配置僅僅針對當前項目有效。
$ git config --global user.name "runoob" $ git config --global user.email test@runoob.com $ git config --list $ git config user.name
git clone http://github.com/CosmosHua/locate new git clone http://github.com/CosmosHua/locate.git new git clone git://github.com/CosmosHua/locate new git clone git://github.com/CosmosHua/locate.git new
#-s 參數,以得到簡短的結果輸出 "AM" 狀態的意思是,這個文件在咱們將它添加到緩存(git add)以後又有改動 「??」未add 「A」已經add
查看比 git status 的結果的詳細信息。
git diff 命令顯示已寫入緩存與已修改但還沒有寫入緩存的改動的區別。git diff 有兩個主要的應用場景。
還沒有緩存的改動 : git diff
查看已緩存的改動 : git diff --cached
查看已緩存的與未緩存的全部改動 : git diff HEAD
顯示摘要而非整個 diff : git diff --stat
取消已緩存的內容。
$ git reset HEAD -- hello.php 取消其中一個緩存的文件
若是刪除以前修改過而且已經放到暫存區域的話,則必需要用強制刪除選項 -f
git rm -f <file>
若是把文件從暫存區域移除,但仍然但願保留在當前工做目錄中。
git rm --cached <file>
git reset --soft|--mixed|--hard <commit_id> git push develop develop --force (本地分支和遠程分支都是 develop) <span style="color:#ff0000;">這裏的<commit_id>就是每次commit的</span><strong><span style="color:#ff0000;">SHA-1</span></strong>,能夠在log裏查看到 --mixed 會保留源碼,只是將git commit和index 信息回退到了某個版本. --soft 保留源碼,只回退到commit信息到某個版本.不涉及index的回退,若是還須要提交,直接commit便可. --hard 源碼也會回退到某個版本,commit和index 都會回退到某個版本.(注意,這種方式是改變本地代碼倉庫源碼)
建立分支命令: git branch (branchname) 切換分支命令: git checkout (branchname) 當你切換分支的時候,Git 會用該分支的最後提交的快照替換你的工做目錄的內容。 git checkout -b (branchname) 命令來建立新分支並當即切換到該分支下 git merge secondBranch #merge secondBrach to master,能夠不用切回master branch 你能夠屢次合併到統一分支, 也能夠選擇在合併以後直接刪除被併入的分支。 刪除分支命令: git branch -d (branchname)
Git log
查看歷史提交記錄 Git log 查看簡潔版 Git log –-oneline
若是你達到一個重要的階段,並但願永遠記住那個特別的提交快照,你可使用 git tag 給它打上標籤。
-a 選項意爲"建立一個帶註解的標籤"。不用 -a 選項不會記錄這標籤是啥時候打的,誰打的,也不會讓你添加個標籤的註解。
$ git tag -a v1.0 –m 「first tag」 若是咱們忘了給某個提交打標籤,又將它發佈了,咱們能夠給它追加標籤 $ git tag -a v0.9 85fc7e7 $ git log --oneline 能夠看到
添加遠程庫
要添加一個新的遠程倉庫,能夠指定一個簡單的名字,以便未來引用,命令格式以下:
git remote add [shortname] [url] git remote add remoteServer https://github.com/Courage-Freadom/hello-world/ git push -u remoteServer master
查看遠程倉庫 $ git remote -v 從遠程倉庫下載新分支,該命令執行完後須要執行git merge git fetch 從遠端倉庫提取數據並嘗試合併到當前分支: git merge
1. 刪除分支
1.1 本地分支
git branch -d iss53
1.2 遠程分支
git push origin :iss53
2. 已經暫存起來的文件和上次提交時的快照之間的差別
git diff —staged
3. 比較2個不一樣版本之間的差別
git diff [branch]:[filename] [other-branch]:filename
4. 打tag
三、git push --tags一、git tag -a v1.1.0 -m "fix bug」 [branch] 二、git tag v1.1.0 master # 也能夠簡單點寫
4.1 獲取倉庫中的全部tags
git fetch --tags
4.2 刪除本地tag
git tag -d v1.0.0
4.3 刪除倉庫中的tag
git push origin :refs/tags/v1.0.0
5. 顯示當前版本
git show master git show develop git show origin iss53 git show v1.0.35
6. 撤銷提交
git revert c2785abf22c1041f6bd7f538538d571372a9127agit push origin master
7. 顯示遠程倉庫的詳細信息
git remote show origin
8. clone 出分支
git clone git@github.com:vearne/carspider.git
clone 出非master的其它分支
git checkout -b develop origin/develop
在本地建立一個 develop 分支,並把它和 origin上的develop 分支關聯起來
9. 放棄全部本地變動
git checkout -f
10. 設置upstream
git branch --set-upstream my_branch origin/my_branch
git status
git log
或者加上參數查看就比較清晰了
$ git log --pretty=oneline
$ git reset --hard HEAD^
$ git reflog
$ git checkout -- <file>
說明:適用於工做區修改沒有add的文件
$ git reset HEAD <file>
說明:適用於暫存區已經add的文件,注意執行完此命令,他會將暫存區的修改放回到工做區中,若是要想工做區的修改也丟棄,就執行第15條命令便可
實際項目開發中,咱們常常會用一些版本控制器來託管本身的代碼,今天就來總結下Git的相關用法,廢話很少說,直接開寫。
目的:經過Git管理github託管項目代碼
1、下載安裝Git
一、下載Git 官方地址爲:
https://git-scm.com/download/win
二、下載完以後,雙擊安裝
三、選擇安裝目錄
四、選擇組件
五、開始菜單目錄名設置
六、選擇使用命令行環境
七、如下三步默認,直接點擊下一步
八、安裝完成
九、檢驗是否安裝成功
回到電腦桌面,鼠標右擊若是看到有兩個git單詞則安裝成功
2、Git基本工做流程
一、Git工做區域
二、向倉庫中添加文件流程
3、Git初始化及倉庫建立和操做
一、Git安裝以後須要進行一些基本信息設置
a、設置用戶名:git config -- global user.name '你再github上註冊的用戶名';
b、設置用戶郵箱:git config -- global user.email '註冊時候的郵箱';
注意:該配置會在github主頁上顯示誰提交了該文件
c、配置ok以後,咱們用以下命令來看看是否配置成功
git config --list
注意:git config --global 參數,有了這個參數表示你這臺機器上全部的git倉庫都會使用這個配置,固然你也能夠對某個倉庫指定不一樣的用戶名和郵箱
二、初始化一個新的git倉庫
a、建立文件夾
方法一:能夠鼠標右擊-》點擊新建文件夾test1
方法二:使用git新建:$ mkdir test1
b、在文件內初始化git(建立git倉庫)
方法一:直接輸入 $ cd test1
方法一:點擊test1文件下進去以後-》鼠標右擊選擇Git Bash Here->輸入$ git int
三、向倉庫中添加文件
方法一:用打開編輯器新建index.html文件
方法二:使用git命令。$ touch '文件名',而後把文件經過$ git add '文件名'添加到暫存區,最後提交操做
四、修改倉庫文件
方法一:用編輯器打開index.html進行修改
方法二:使用git命令。$ vi '文件名',而後在中間寫內容,最後提交操做
五、刪除倉庫文件
方法一:在編輯器中直接把要刪除的文件刪除掉
方法二:使用git刪除:$ git rm '文件名',而後提交操做
4、Git管理遠程倉庫
一、使用遠程倉庫的目的:備份、實現代碼共享集中化管理
Git遠程倉庫實際上就是保持在服務器上的git倉庫文件
5、Git克隆操做
目的:將遠程倉庫(github上對應的項目)複製到本地
一、代碼:git clone 倉庫地址
倉庫地址由來以下:
二、克隆項目
三、將本地倉庫同步到git遠程倉庫中:git push
期間出現錯誤的狀況有:
a、出現提交錯誤
解決:這是經過Git GUI進行提交時發生的錯誤,由 .git 文件夾中的文件被設爲「只讀」所致,將 .git 文件夾下的全部文件、文件夾及其子文件的只讀屬性去掉便可。
b、若是出現沒法同步或沒有權限,解決方法以下:
用戶名和密碼必定要和github上的一致。
1、具體規則
先來看看公式:
<type>(<scope>): <subject>
type
用於說明 commit 的類別,只容許使用下面7個標識。
feat : 新功能(feature)
fix : 修補
bugdocs : 文檔(documentation)
style : 格式(不影響代碼運行的變更)
refactor : 重構(即不是新增功能,也不是修改bug的代碼變更)
test : 增長測試
chore : 構建過程或輔助工具的變更
scope
用於說明 commit 影響的範圍,好比數據層、控制層、視圖層等等,視項目不一樣而不一樣。
subject
是 commit 目的的簡短描述,不超過50個字符。
以動詞開頭,使用第一人稱如今時,好比change,而不是changed或changes
第一個字母小寫
結尾不加句號(.)
異常處理
咱們先來看看這個異常提醒:
INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" !
jartto:fix bug
這裏之因此報出這個警告,是由於個人提交出現了兩個問題:
其一,使用了規範外的關鍵字;
其二,很細節的問題,jartto:後少了空格;
這時候我纔回憶起來,當時提交一直失敗,情急之下直接強制提交,因此之後的提交都會抱出這個異常。大體意思就是:
你的以前的 Commit 不合格~你的以前的 Commit 不合格~你的以前的 Commit 不合格
這時候就很煩了,咱們只能去將以前的錯誤修正,那麼如何操做呢?
3、如何修改以前的 commit 信息?
其實並不複雜,咱們只須要這樣作:
一、將當前分支無關的工做狀態進行暫存
git stash
二、將 HEAD 移動到須要修改的 commit 上
git rebase 9633cf0919^ --interactive
三、找到須要修改的 commit ,將首行的 pick 改爲 edit
四、開始着手解決你的 bug
五、 git add 將改動文件添加到暫存
六、 git commit –amend 追加改動到提交
七、git rebase –continue 移動 HEAD 回最新的 commit
八、恢復以前的工做狀態
git stash pop
4、項目中使用
這時候問題又來了,爲何我提交的時候會有警告,這個又是如何作到的呢?
這時候,咱們須要一款 Node 插件 validate-commit-msg 來檢查項目中 Commit message 是否規範。
1.首先,安裝插件:
npm install --save-dev validate-commit-msg
2.使用方式一,創建 .vcmrc 文件:
{
"types": ["feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", "revert"],
"scope": {
"required": false,
"allowed": ["*"],
"validate": false,
"multiple": false
},
"warnOnFail": false,
"maxSubjectLength": 100,
"subjectPattern": ".+",
"subjectPatternErrorMsg": "subject does not match subject pattern!",
"helpMessage": "",
"autoFix": false
}
3.使用方式二:寫入 package.json
{
"config": {
"validate-commit-msg": {
/* your config here */
}
}
}
4.但是咱們若是想自動使用 ghooks 鉤子函數呢?
{
…
"config": {
"ghooks": {
"pre-commit": "gulp lint",
"commit-msg": "validate-commit-msg",
"pre-push": "make test",
"post-merge": "npm install",
"post-rewrite": "npm install",
…
}
}
…
}
在 ghooks 中咱們能夠作不少事情,固然不僅是 validate-commit-msg 哦。
更多細節請參考:validate-commit-msg
5、Commit 規範的做用
提供更多的信息,方便排查與回退;
過濾關鍵字,迅速定位;
方便生成文檔;
6、生成 Change log
正如上文提到的生成文檔,若是咱們的提交都按照規範的話,那就很簡單了。生成的文檔包括如下三個部分:
New features
Bug fixes
Breaking changes.
每一個部分都會羅列相關的 commit ,而且有指向這些 commit 的連接。固然,生成的文檔容許手動修改,因此發佈前,你還能夠添加其餘內容。
這裏須要使用工具 Conventional Changelog 生成 Change log :
npm install -g conventional-changelog
cd jartto-domo
conventional-changelog -p angular -i CHANGELOG.md -w
爲了方便使用,能夠將其寫入 package.json 的 scripts 字段。
{
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
}
}
這樣,使用起來就很簡單了:
npm run changelog
到這裏,咱們全部的問題都搞明白了, Cheers~
7、總結
看完文章,你還會如此放蕩不羈嗎?你還會爲所欲爲的編寫 Commit 嗎?你還會如此 git commit -m "hello world"提交嗎?
版本控制系統(VCS,version controlSystem)
能夠實現的功能
A. 記錄文件的全部歷史變化
B. 隨時恢復到任何一個歷史狀態
C. 多人協做開發或修改
D. 錯誤恢復
E.多功能並行開發
版本控制分類
A. 本地版本控制系統
B. 集中化版本控制系統
C. 分佈式版本控制系統
版本控制系統的基本概念
1. repository 存放全部文件及其歷史信息(也叫倉庫)
2. checkout 取出或切換到指定版本的文件
3. version 記錄標識一個版本(編號或其餘代碼)
4. tag 記錄標識一個主要版本(1.0 2.0 3.0)
僅運行在本地,能夠不使用網絡
表明版本類型èRCS(Revision ControlSystem)
優勢:簡單、不少系統中都內置、適合管理文本文件(如配置文件、文章、信件、簡單文檔等)
缺點:只合適管理少許文件、不支持基於項目管理、支持文件類型單1、不支持網絡、沒法實現多人協做。
表明版本èCVS(concurrent versionSystem) subversion
優勢 :適合多人團隊協做開發、代碼集中管理
缺點 : 單點故障、必須聯網工做、沒法實現單機本地工做
表明版本ègit mercurial(水銀)
優勢:適合多人團隊協做開發、代碼集中管理、能夠離線工做、每一個計算機都是一個完整的倉庫
開源的分佈式版本控制系統,最初是取代bitkeeper,linus Torvalds開發,用於Linux內核代碼管理系統
優勢:速度快、設計簡單(配置簡單)、對非線性開發模式支持好(多分支開發)、徹底分佈式有能力高效管理相似Linux內核同樣的超大規模項目
使用快照(沒有變化的版本庫連接到原始版本,變化的保存下來),而不是保存。
每一種版本控制系統都用一種辦法追蹤不一樣階段文件的變化。
其餘版本控制系統的工做原理,使用補丁(保存)
1. 幾乎全部操做都是在本地(分佈式是指每一個電腦都有一個完整的版本庫)
2. 經過校驗和算法識別文件變化
a) 經過sha-1算法對文件內容或目錄結構進行哈希,得出的假煙值做爲變化的指紋
3. 多數操做均爲添加數據(刪除的文件能夠經過回溯的原始版本找回)
Git repository 最終肯定的文件保存到倉庫,成爲新的版本,對他人可見
Staging area(index) 暫存區域,暫存已經修改的文件
Working Directory 編輯、修改文件
官方網站git-scm.com , 網站提供了多種系統多種方式的下載
centos 環境下使用命令#yum install –y git
Ubuntu環境下使用命令#apt-get install git
Windows環境下載exe安裝包,使用默認安裝設置。生成git bash,經過git bash能夠直接使用相似Linux的命令,默認的使用路徑是家目錄。
建立一個文件夾,打開文件夾,右擊,creat gitrepository here,該文件夾便是本地的倉庫。從git bash 中切換到該目錄能夠看到其識別爲倉庫的主分支。
在mac os x 中,安裝xcode的時候會默認安裝git,因此先在terminal中確認是否安裝。進入AppStore,搜索Xcode,點擊details,點擊install,大小一般爲1.7GB左右,須要等待一段時間。
打開Xcode, 點擊菜單項,進入download,有command linetools一項,傳統使用的gcc、git等包含在該項中,默認是沒有安裝,需手動安裝。
Git安裝完成以後,須要進行一些基本信息設置
1. 設置用戶名
# git config –global user.name 「YourName」
2. 設置用戶郵箱
# git config –global user.email 「yourmail@Mail.com」
3. 查看設置
# git config --list
用戶名和郵箱是提交代碼是的標識,能夠設置全局帳戶,也能夠針對某個倉庫進行設置
一、獲取全局幫助
# git help
二、獲取特定命令的幫助
# git help 特定命令名
一、 建立一個文件夾,能夠直接使用已有的文件夾
# mkdir book
二、 在文件夾內初始化git,建立git倉庫
# cd book
# git init 在book文件夾中建立.git文件夾,全部的倉庫數據文件都是保存在.git文件夾中,所說的git倉庫即爲.git文件夾。
三、
一、 建立相應的文件,如readme、book.cpp
# touch readme book.cpp
二、 查看當前工做目錄下的全部文件的狀態
# git status
三、 將相應的文件添加到暫存區域中,能夠同時添加多個文件
# git add readme
四、 添加到倉庫中
# git commit -m 「initrepo」 -m參數後字符串用於註釋當前此次提交作了哪些工做
五、 查看git提交歷史
# git log
Commit後的字符串是SHA碼,其後爲做者,提交日期,註釋信息
用git寫項目的時候,經過命令git config --list看到git bash中有默認的遠程倉庫地址。
默認第一個項目給出了https://gitee.com/XXX/Music.git,
若是想再第二個項目中引用git地址,那麼運行命令
HTML運行復制全屏
一、git remote 查看全部遠程倉庫, git remote xxx 查看指定遠程倉庫地址
二、git remote rm origin 刪除全局默認倉庫地址
三、git remote add origin XXX 添加一個項目地址
這樣就能夠初始化全局的git我的信息
還有修改我的信息的時候
若是你沒有初始化過。那麼直接:
$ git config --global user.name "輸入你的用戶名"
$ git config --global user.email "輸入你的郵箱"
這樣就能夠初始化了。
若是已經初始化過以後,能夠用一下命令再次對初始化進行更改
$ git config --global --replace-all user.email "輸入你的郵箱"
$ git config --global --replace-all user.name "輸入你的用戶名"
而後再查看下
$ git config --list
發現修改爲功了。
git add . 提交新文件和被修改文件,不包括被刪除文件
git add -u 提交被修改和被刪除文件,不包括新文件
git add -A 提交更更改過的代碼
git commit -m "提交行爲描述"
git push -u origin branchname 提交代碼到遠程倉庫
複製GitStats項目到本地
cd ~/dev
git clone git://github.com/trybeee/GitStats.git
python ~/dev/gitstats/git-stats /youproject public
git pull origin branchname
git branch -vv 查看分支關聯
git branch #查看本地分支
git branch --all #查看本地和遠程倉庫的分支
git checkout branchname #切換分支
git branch -d branchname #刪除本地分支
查看分支提交日誌
git log -3
代碼回滾到指定版本
git reset --hard e377f60e28c8b84158
查看本地被修改的文件
git status
緣由:你使用的是https 方式提交代碼,若改成ssh方式提交,問題就會獲得有效解決。
首先你能夠輸入命令:git remote -v,查看本身獲取和提交代碼的方式,如果https,則執行後顯示以下:
註釋:https方式和ssh 方式的git地址區別:
https: https://github.com/gongjenny/vue-come-on.git
ssh : git@github.com:gongjenny/vue-come-on.git
刪除以前配置的https,改成ssh方式
刪除以前配置的https 提交方式,在終端執行以下命令: **git remote rm origin** **git remote add origin git@github.com:gongjenny/vue-come-on.git** 此時,若執行 **git push --set-upstream origin master** ,會顯示以下:
說明當前權限不夠。
這時就須要你建立ssh的key值了,執行命令以下: **ssh-keygen -t rsa -C "用戶名"**,直接enter走完,顯示以下:
這時回到本身的github,找到右邊的**settings**,點擊進入,找到左邊**Deploy keys** 進入添加key頁面 ,
最後,執行 **git push --set-upstream origin master** 提交代碼。 ###補充: 若想用 **git push** 簡短的命令,須要配置:**git config --global push.default simple** 或 **git config --global push.default matching**
區別在於:前者只提交當前分支的內容,後者能夠提交在全部分支的內容。
打開項目git命令行,輸入
git fetch --all
git reset --hard origin/develop
第一個命令的意思是取回遠程端全部修改,第二句的意思是將版本號置到develop這個版本上。固然若是你須要置的是你本身的私有版本,也能夠置到私有版本號上。
到這裏再使用git pull去取項目的時候,就不會報修改未提交的問題了。
設置默認提交,
一、 提交文件
# git commit –a –m「modify book.cpp」
跳過暫存區域,直接提交到倉庫中,這裏主要用於提交修改的文件,文件必須使用git add 添加到暫存區域中
一、 使用現有的git網絡倉庫服務
a) Github。https://github.com 開源倉庫是免費的,私有倉庫收費
b) BitBucket。https://bitbucket.org
二、 搭建本身的git倉庫服務器
/git步驟/
git pull //拉代碼
git status //查看狀態
git add . //添加全部 [或者.或者是路徑]
git commit -m "加備註" //提交代碼
git push //推送到遠程分支
/步驟 end/
1.安裝git
2.打開「Git」->「Git Bash」,若能打開,證實安裝成功。
3.配置用戶名和email
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
4.(初始化倉庫)先建立一個空文件夾,經過cd到達該目錄下,經過git init命令把這個目錄變成Git能夠管理的倉庫。
5.新建index.html--->git status--->git add index.html--->git commit -m "imdex.html"
如何新建index.html文件?
能夠直接在目錄下新建,或者輸入touch <name>/touch index.html
6.添加文件到Git倉庫,分兩步:
使用命令git add <file>(注意,可反覆屢次使用,添加多個文件)
使用命令git commit -m <message>,完成。
7.每次修改了文件都須要從新添加文件到Git倉庫。
一、git用戶的目錄/home/git
二、倉庫主目錄/home/git/repositories
三、權限管理倉庫 /home/git/repositories/gieolite-admin.git
四、/home/git/.gitolite目錄
五、ssh服務器的key目錄/home/git/.ssh
六、受權文件/home/git/.ssh/authorized_keys
一、 刪除文件
# rm README
二、 從git中刪除文件
# git rm README
這裏雖然刪除了README文件,可是在git的歷史版本庫中依然存在,能夠經過回溯到歷史版本庫找回
三、 提交操做
# git commit –m 「deleteREADME」
四、 經過日誌文件查看歷史操做
# git log
重命名文件
# git mv book.cppbookSource.cpp
# git commit –m 「renamebook.cpp filename to bookSource.cpp」
這裏的git mv命令至關於在本地重命名文件,刪除倉庫的文件,將重命名的文件添加到暫存區域,即:
# mv book.cppbookSource.cpp
# git rm book.cpp
# git addbookSource.cpp
github新建項目 複製項目地址 git clone 粘貼項目地址 文件夾名稱 代碼放進生成的文件夾 進入目標文件夾 git add * git commit -m '提交的描述' git push git pull [倉庫連接] 拉取倉庫信息 git checkout [分支名] 選擇分支 git branch 查看全部分支 git branch [分支名] 選擇某一個分支 git branch -d [分支名] 刪除某一個分支 git branch -D [分支名] 強制刪除某一個分支 git merge [分支名] 合併某一個分支進來
Git gui,打開倉庫所在目錄會自動識別當前的倉庫,
查看master分支歷史,能夠看到全部的歷史版本及修改日誌。
以前提到的操做都是本地的操做,並無同步到git服務器上,使得其餘開發者沒法及時查看到倉庫的動態。
遠程倉庫中只保存的.git文件夾
一、 Local 本地型
二、 SSH
三、 Git
四、 HTTP/HTTPS,只能下載數據,不能提交數據
git經常使用的命令 :
# 分支的建立和合並
git branch yourbranch
git checkout yourbranch
# 切換到yourbranch
# 開發yourbranch分支,而後開發以後與master分支合併
git checkout master
git merge yourbranch
git branch -d yourbranch
# 合併完後刪除本地分支
如何將牛人的遠程分支更新到本身的本地分支?
# 查看當前項目下遠程
git remote
# 增長新的分支連接,例如
git remote add niuren giturl…
# 獲取牛人的遠程更新
git fetch niuren
# 將牛人的遠程更新合併到本地分支
git merge niuren/master
生產力小技巧
codeshelver:給git庫作標籤
觀察的項目若是多了,怎麼管理?用codeshelver,安裝擴展以後,能夠對GitHub項目作標
籤。
gollum:利用git與github作wiki
gollum是一個基於git的輕型wiki系統。
GitHubwatcher: 監測重點項目
GitHubwatcher適用於通知不頻繁的情景
參考連接:https://mp.weixin.qq.com/s/pN7MfMLdsOxckENzOwV4CQ
http://gitbook.liuhui998.com/4_9.html
https://blog.csdn.net/capricorn90/article/details/51168444
連接:
Git官方文檔 : https://git-scm.com/book/zh/v2
菜鳥 Git 教程:http://www.runoob.com/git/git-tutorial.html
Git教程 :https://www.w3cschool.cn/git/
阿里雲 Git 系列 : https://yq.aliyun.com/search/articles?spm=a2c4e.11163080.searchteam.1.1c262ec1JNbbf2&q=git
Git 魔法 : http://www.voidcn.com/course/project/nboypv
Pro Git v2 中文版 : http://www.voidcn.com/course/project/fgcrkp
(掘金小冊)Git 系列 : https://juejin.im/tag/Git
https://segmentfault.com/a/1190000014461898
https://opensource.com/article/18/1/step-step-guide-git
碼雲git本地倉庫連接遠程倉庫 : https://www.jianshu.com/p/094bbc061c21
GIT 簡單的本地分支上傳遠程倉庫分支命令行 : https://www.qdfuns.com/article/23217/ce41ba88f8336c69fcaf041242defd6d.html
分支管理----解決衝突 :https://www.qdfuns.com/article/39070/ede22b7346be936c3653402498564212.html
分支管理----建立和合並分支 :https://www.qdfuns.com/article/39070/a6eceeca2e20786d748f7fc98f0b9571.html
關於git----分佈式版本控制系統----版本回退(簡潔版):https://www.qdfuns.com/article/39070/06a07d55026f3648d3ff1a3a785c0b85.html
關於git----分佈式版本控制系統----版本回退 : https://www.qdfuns.com/article/39070/594562b99d5c30d6267f9837e98d2679.html
用Git上傳文件到Github倉庫 : https://www.qdfuns.com/article/45274/021428b88a33cdff7396604fb638c9b2.html
搭建本身的小型Git Server :https://blog.ansheng.me/article/build-your-own-mini-git-server
git基礎 : https://www.qdfuns.com/article/15102/fba34130a46751269081a24365b8decb.html
Git操做遠程庫 : https://www.qdfuns.com/article/14681/0a015e9084e78120ce87907cddf55a6e.html
Git經常使用命令總結 : https://www.qdfuns.com/article/15019/2d2ef6ba076ae59db56988d4e9b98c51.html
Git的簡單使用 : https://www.qdfuns.com/article/14681/a47ee36c9856da591599f56354fef5e3.html
Git使用教程:最詳細、最傻瓜、最淺顯、真正手把手教 : https://mp.weixin.qq.com/s/IDChhMK_BR1dUJemOnwv9Q
原 Git(一):git基本的工做流程 : https://blog.csdn.net/ZuoAnYinXiang/article/details/78471574
在 Linux 下搭建 Git 服務器:https://mp.weixin.qq.com/s/05KzYi7w2QDGu9t4KSZNHQ
Git 簡明指南:https://mp.weixin.qq.com/s?__biz=MzI3MTI2NzkxMA==&mid=2247485576&idx=1&sn=0abc45398e306bf46307aa1f56447a4a&chksm=eac529a1ddb2a0b7fb531084c62377738b4639fb87add3fba2b6fe184c8256697358d89c00bd&scene=21#wechat_redirect
Git 經常使用命令速查 : https://www.jb51.net/article/55442.htm
git 命令速查表 : https://www.cnblogs.com/yllam/p/5005090.html
git參考手冊--文字說明+git速查命令表(圖片) : https://www.imooc.com/article/14193
Git 工做流程 : https://www.cnblogs.com/itech/p/5227089.html
Git 進階指南 : https://www.cnblogs.com/itech/p/5188942.html
git代碼回滾:Reset、Checkout、Revert的選擇 : https://www.cnblogs.com/itech/p/5188933.html
git代碼合併:Merge、Rebase的選擇 : https://www.cnblogs.com/itech/p/5188932.html
四種常見 Git 工做流比較 : https://www.cnblogs.com/itech/p/5188929.html
CentOS中Git客戶端的安裝和基礎配置教程 : https://www.jb51.net/os/RedHat/454670.html
CentOS系統上搭建Git版本控制服務器的教程 : https://www.jb51.net/os/RedHat/454703.html
centos6.5用yum安裝git的方法 : https://www.jb51.net/os/RedHat/149671.html
centos在線安裝git的方法 : https://www.jb51.net/os/RedHat/149653.html
關於 Git SSH 使用的項目實踐 : : https://www.jianshu.com/p/814d299541f3
Streamsets項目git環境搭建 : https://www.jianshu.com/p/9be8f4a7aaa5
使用Nginx反代理訪問Git解決413問題 : https://www.jianshu.com/p/f06c09933b00
解決git本地多ssh key的問題 : http://blog.51cto.com/nolinux/1753470
關於 Git SSH 使用的項目實踐 : https://www.jianshu.com/p/814d299541f3
GIt的備份和恢復 :http://blog.51cto.com/sgk2011/1925939
CentOS系統安裝使用版本控制系統Subversion的方法 : https://www.jb51.net/os/RedHat/306574.html
CentOS安裝TortoiseSVN 客戶端 : https://www.jb51.net/os/RedHat/220595.html
CentOS 6.3下使用Gitosis安裝搭建Git Server教程 : https://www.jb51.net/os/RedHat/216133.html
Centos Nginx + Svbversion配置安裝方法分享 : https://www.jb51.net/os/RedHat/35924.html
Git客戶端TortoiseGit(Windows系統)的使用方法 : https://www.jb51.net/article/55440.htm
Linux下Git圖形化界面客戶端盤點:https://mp.weixin.qq.com/s/UmkBmllqNmcjPYOaGAkSsQ
git和SVN的區別 https://mp.weixin.qq.com/s/JkZpFSaEwVykjiNVaEdulQ
廖雪峯的 git 教程 : https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
腳本之家 Git系列 : http://so.jb51.net/cse/search?s=10520733385329581432&entry=0&ie=gbk&nsid=0&ie=gbk&q=git
git/svn : https://blog.csdn.net/chdhust/article/category/5696673
git : https://blog.csdn.net/m0_37450089/article/category/7308830
如何在 git commit message 中玩溜 emoji : https://juejin.im/post/5b0262edf265da0b9b079fa7
建立git私有倉庫 : https://www.liaoxuefeng.com/article/001373894410719a19c79d040c84fd4a7492efc60081be1000
git 常見操做 : https://www.jianshu.com/p/c38d00a3736c
git查看本地和建立分支、上傳分支、提交代碼到分支、刪除分支等 : https://blog.csdn.net/Sky786905664/article/details/79257409
轉 代碼回滾:git reset、git checkout和git revert區別和聯繫 : https://blog.csdn.net/Sky786905664/article/details/79150828
轉 Git 經常使用命令大全 : https://blog.csdn.net/Sky786905664/article/details/78557397
轉 GitHub入門:如何上傳與下載工程? : https://blog.csdn.net/Sky786905664/article/details/54928717
CentOS6.8 部署Tomcat+jenkins+git+maven+ant 持續集成 : http://blog.51cto.com/zlyang/1939843
Git 恢復誤刪除的本地倉庫文件 : http://blog.51cto.com/zlyang/1939983
在Linux下搭建Git服務器 (CENTOS 6.6) : https://www.jianshu.com/p/40972dd4809e
git常見用法介紹 : https://www.cnblogs.com/crazyacking/p/6622986.html
git切換到遠程分支 : https://www.cnblogs.com/crazyacking/p/5620655.html
在 Git 中 Checkout 歷史版本 : https://www.cnblogs.com/crazyacking/p/5620635.html
Git 提交的正確姿式:Commit message 編寫指南 : https://www.cnblogs.com/crazyacking/p/5121591.html
纔開始學git,慢慢豐富,下面是一些參考資料。
概述:
http://guibin.iteye.com/blog/1014369
工做區、暫存區、版本庫的概念
http://www.worldhello.net/2010/11/30/2166.html
progit
http://github.danmarner.com/section/toc/
經驗
http://www.open-open.com/lib/list/282?pn=1
http://www.open-open.com/lib/view/open1328069733264.html
Git 手冊 :https://blog.csdn.net/oDeviloo/article/details/71786401
初見github :https://www.qdfuns.com/article/14681/cecf58f5ef1b48a125f0383dd69192ef.html
本地項目上傳到GitHub,記錄 :https://www.qdfuns.com/article/42211/68b452c4ca8da4489bdef378ec833946.html
Git和GitHub資料彙總 :https://blog.csdn.net/u013162035/article/details/78773539
Git與Github使用筆記 :https://blog.csdn.net/column/details/18245.html
搭建本身的小型Git Server : https://blog.ansheng.me/article/build-your-own-mini-git-server
GitHub 使用手冊 - 基礎篇 : http://www.voidcn.com/course/project/fhprwi
(掘金小冊) GitHub 系列 : https://juejin.im/tag/GitHub
原 Github項目解析系列 (15):https://blog.csdn.net/qq_23547831/article/category/6273517
(易百教程) GitLab教程 : https://www.yiibai.com/gitlab/
GitHub Pages 指南 : http://www.voidcn.com/course/project/mswxwu
github使用bash上傳之總結版 : https://www.qdfuns.com/article/33603/398ec378be6b1bbd83cbeb9c4d850c7c.html
意淫系列-GitHub教程 : https://blog.csdn.net/googler_offer/article/details/79971779
3個搜索技巧!在 GitHub上快速找到實用資源! :https://mp.weixin.qq.com/s/WEDQp8IoIn3YHvvoKeXVIQ
用GitLab搭建本身的私有GitHub庫的步驟 : https://www.jb51.net/article/128349.htm
gitlab工做流程簡介 : https://www.cnblogs.com/crazyacking/p/5618091.html
使用GitHub創建我的網站 : https://www.cnblogs.com/crazyacking/p/4678976.html
私立gitlab服務器 : http://blog.51cto.com/leoheng/2136882
靜態博客 Github 並存指南 : https://wdxtub.com/2016/01/05/hexo-github-site/
gitlab的鉤子相關配置 http://fighter.blog.51cto.com/1318618/1670667
CentOS7.2安裝GitLab-CE : http://blog.51cto.com/ygqygq2/1861672
windows下使用TortoiseGit在Git@OSC代碼託管 : http://blog.51cto.com/ygqygq2/1718988
TortoiseGit之配置密鑰 : http://blog.51cto.com/ygqygq2/1718283
gitlab數據遷移故障總結 : http://blog.51cto.com/11291941/1868573
基於 GitLab 的 CI 實踐 : https://mp.weixin.qq.com/s/ZzJnZtZn3sX-JmPfs1uASg
(轉)SVN-服務器發送了意外的返回值(405 Method Not Allowed) : http://blog.chinaunix.net/uid-25266990-id-2948841.html
svn用戶管理腳本 : http://blog.chinaunix.net/uid-25266990-id-2774758.html
私立SVN服務器 : http://blog.51cto.com/leoheng/2121609
[SCM]軟件配置管理 : https://www.cnblogs.com/itech/archive/2011/08/26/2154623.html
git 撤銷修改以及刪除文件 : https://www.cnblogs.com/x123811/p/6047266.html
GitLab
企業級GitLab倉庫環境構建 : http://blog.51cto.com/zhaochj/1737738
Gitlab 工具Source tree使用 : http://blog.51cto.com/sgk2011/1926198
gitlab更改默認Nginx 置頂 : http://blog.51cto.com/sgk2011/1926119
Gitlab遷移 : http://blog.51cto.com/sgk2011/1925946
Gitlab用戶權限管理 : http://blog.51cto.com/sgk2011/1925922
Gitlab的管理使用手冊 薦 : http://blog.51cto.com/dl528888/1305656
配置gitlab環境實現代碼管理及Web Hook測試和ldap認證 薦 : http://blog.51cto.com/rfyiamcool/1365521
Gitlab的管理使用手冊 薦 : http://blog.51cto.com/dl528888/1305656
在centos裏安裝gitlab 薦 :http://blog.51cto.com/dl528888/1213286
gitlab 災備 :https://www.jianshu.com/p/78d8805cddbf
企業裏實現代碼自動部署、回滾的解決方案——Caphub 薦 : http://blog.51cto.com/dl528888/1276174
自動化代碼部署、代碼回滾、命令執行軟件之capistrano 薦 : http://blog.51cto.com/dl528888/1270670
git(4篇) : https://www.cnblogs.com/sparkdev/category/905066.html
https://segmentfault.com/a/1190000014461898
it刪除某次提交(某個commit)的方法 : https://www.36nu.com/post/275