首頁 > 軟體

Git版本管理集錦

2020-06-16 17:17:21

用慣了SVN,突然轉到Git難免有點不適,寫個筆記好好備忘總結一番。

一、先看歷史(imooc上的一個圖):

二、Git與Svn

Git跟SVN一樣有自己的集中式版本庫或伺服器。但,Git更傾向於被使用於分散式模式,也就是每個開發人員從中心版本庫/伺服器上chect out程式碼後會在自己的機器上克隆一個自己的版本庫。可以這樣說,如果你被困在一個不能連線網路的地方時,就像在飛機上,地下室,電梯裡等,你仍然能夠提交檔案,檢視歷史版本記錄,建立專案分支,等。對一些人來說,這好像沒多大用處,但當你突然遇到沒有網路的環境時,這個將解決你的大麻煩。

三、那什麼情況推薦使用svn

SVN具有的悲觀鎖的功能,能夠實現一個使用者在編輯時對檔案進行鎖定,阻止多人同時編輯 一個檔案。這一悲觀鎖的功能是 Git 所不具備的。對於以二進位制檔案 (Word文件、PPT簡報) 為主的版本庫,為避免多人同時編輯造成合併上的困難, 建議使用SVN做版本控制。

四、Git工作原理

五、git安裝設定

mac下實際無需安裝直接在命令視窗輸入git即可彈出安裝確認,這種方式安裝預設是安裝到/usr/bin目錄下,且不需要設定環境變數

另一種方式就是手動安裝dmg包,需要設定環境變數

官網下載:http://git-scm.com/download/mac

vi ~/.bash_profile
export PATH="/usr/local/git/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:$PATH"
source ~/.bash_profile
重新啟動一下終端,檢查是否安裝成功
git version

使用者資訊設定:

$ git config --global user.name "jager"
$ git config --global user.email jager@example.com

或 直接編輯組態檔:

vi ~/.gitconfig
 
[user]
name = jager
email = jager@example.com
[color]
ui = auto
branch = auto
diff = auto
status = auto
[color "branch"]
current = green
local = yellow
remote = red
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
[color "status"]
added = yellow
changed = green
untracked = cyan
[alias]
st = status
di = diff
ci = commit
co = checkout
br = branch

設定公私鑰:

== 生成git金鑰 ==
ssh-keygen -t rsa -C "jager@example.com"
秘鑰名稱填寫:git_rsa
其他預設即可

== 設定git金鑰 ==
vim ~/.ssh/config
//增加以下內容,IdentityFile路徑為你生成的git私鑰檔案路徑
Host XXX
User git
IdentitiesOnly yes
IdentityFile /Users/你的使用者名稱/.ssh/git_rsa

== 設定公鑰 ==
拷貝公鑰 pbcopy < ~/.ssh/git_rsa.pub 
新增到git管理平台

== FAQ ==
最後一步沒設定可能出現錯誤:
Permission denied (publickey).
fatal: Could not read from remote repository.

六、git常用命令

  •   workspace: 本地工作目錄
  •   index:快取區域,臨時儲存本地改動
  •   local repository: 本地倉庫
  •   remote repository:遠端倉庫
== git設定 ==
git config --list //檢視當前git的設定,Git的設定檔案為.gitconfig,它可以在使用者主目錄下(全域性設定),也可以在專案目錄下(專案設定)

== 檢視資訊 ==
git log //檢視提交記錄
git status //檢視修改狀態
git diff //檢視詳細修改內容
git show //顯示某次提交的內容
git branch //列出所有本地分支
git tag //列出所有tag
git reflog //顯示當前分支的最近幾次提交

== 新建程式碼庫 ==
git init //在當前目錄新建一個Git程式碼庫
git init [project-name] //新建一個目錄,將其初始化為Git程式碼庫
git clone [url] //下載一個專案和它的整個程式碼歷史

== 增加/刪除 ==
git add [file1] [file2] ... //新增指定檔案到暫存區
git add [dir] //新增指定目錄到暫存區,包括子目錄
git add . //新增當前目錄的所有檔案到暫存區
git rm [file1] [file2] ... //刪除工作區檔案,並且將這次刪除放入暫存區
git mv [file-original] [file-renamed] //改名檔案,並且將這個改名放入暫存區

== 程式碼提交 ==
git commit -m [message] //程式碼提交到本地倉庫
git commit [file1] [file2] ... -m [message] //提交指定檔案到本地倉庫
git commit -a //提交工作區自上次commit之後的變化,直接到倉庫區
git commit -v //提交時顯示所有diff資訊
git commit --amend -m [message] //使用一次新的commit,替代上一次提交,如果程式碼沒有任何新變化,則用來改寫上一次commit的提交資訊

== 分支管理 ==
git branch -r //列出所有遠端分支
git branch -a //列出所有本地分支和遠端分支
git branch [branch-name] //新建一個分支,但依然停留在當前分支
git checkout -b [branch] //新建一個分支,並切換到該分支
git checkout [branch-name] //切換到指定分支,並更新工作區
git checkout - //切換到上一個分支
git merge [branch] //合併指定分支到當前分支(如master)
git branch -d [branch-name] //刪除分支
git push origin --delete [branch-name] //刪除遠端分支
git branch -dr [remote/branch] //刪除遠端分支

== 遠端同步 ==
git fetch [remote] //下載遠端倉庫的所有變動,到index
git pull //更新本地倉庫至最新改動,到workspace
git remote -v //顯示所有遠端倉庫
git remote show [remote] //顯示某個遠端倉庫的資訊
git remote add [shortname] [url] //增加一個新的遠端倉庫,並命名
git pull [remote] [branch] //取回遠端倉庫的變化,並與本地分支合併
git push origin master //推播至master分支
git push [remote] [branch] //上傳本地指定分支到遠端倉庫
git push [remote] --force //強行推播當前分支到遠端倉庫,即使有衝突
git push [remote] --all  //推播所有分支到遠端倉庫

== 復原 ==
git reset [file] //重置暫存區的指定檔案,與上一次commit保持一致,但工作區不變
git reset --hard //重置暫存區與工作區,與上一次commit保持一致
git checkout //從index恢復到workspace
git checkout . //恢復暫存區的所有檔案到工作區
git checkout -- files //檔案從index恢復到workspace
git checkout HEAD -- files //檔案從local repository複製到workspace

== 衝突解決 ==
git diff //對比workspace與index
git diff HEAD //對於workspace與最後一次commit
git diff <source_branch> <target_branch> //對比差異
git add <filename> //修改完衝突,需要add以標記合併成功 

七、git使用流程規範【重要】

下面是ThoughtBot 的Git使用規範流程,推薦使用:

Create a local feature branch based off master.

git checkout master
git pull
git checkout -b <branch-name>

Rebase frequently to incorporate upstream changes.

git fetch origin
git rebase origin/master

Resolve conflicts. When feature is complete and tests pass, stage the changes.

git add --all

When you've staged the changes, commit them.

git status
git commit --verbose

Write a good commit message. Example format:

Present-tense summary under 50 characters

* More information about commit (under 72 characters).
* More information about commit (under 72 characters).

http://project.management-system.com/ticket/123

If you've created more than one commit, use git rebase interactively to squash them into cohesive commits with good messages:

git rebase -i origin/master

Share your branch.

git push origin <branch-name>

Submit a GitHub pull request.

Ask for a code review in the project's chat room.

總結大致如下:

  •   新建分支
  •   提交分支
  •   撰寫commit資訊
  •   與主幹同步
  •   合併commit
  •   推播到遠端倉庫
  •   發出pull request,請求別人進行程式碼review

Git 教學系列文章: 

GitHub 使用教學圖文詳解  http://www.linuxidc.com/Linux/2014-09/106230.htm 

Git使用圖文詳細教學  http://www.linuxidc.com/Linux/2016-11/136781.htm

Ubuntu Git安裝與使用 http://www.linuxidc.com/Linux/2016-11/136769.htm

Git 標籤管理詳解 http://www.linuxidc.com/Linux/2014-09/106231.htm 

Git 分支管理詳解 http://www.linuxidc.com/Linux/2014-09/106232.htm 

Git 遠端倉庫詳解 http://www.linuxidc.com/Linux/2014-09/106233.htm 

Git 本地倉庫(Repository)詳解 http://www.linuxidc.com/Linux/2014-09/106234.htm 

Git 伺服器搭建與用戶端安裝  http://www.linuxidc.com/Linux/2014-05/101830.htm 

Git 概述 http://www.linuxidc.com/Linux/2014-05/101829.htm 

分享實用的GitHub 使用教學 http://www.linuxidc.com/Linux/2014-04/100556.htm 

Git從入門到學會 http://www.linuxidc.com/Linux/2016-10/135872.htm

Git基本操作詳解 http://www.linuxidc.com/Linux/2016-10/135691.htm


IT145.com E-mail:sddin#qq.com