用慣了svn,忽然轉到git不免有點不適,寫個筆記好好備忘總結一番。html
1、先看歷史(imooc上的一個圖):git
2、git與svngithub
GIT跟SVN同樣有本身的集中式版本庫或服務器。但,GIT更傾向於被使用於分佈式模式,也就是每一個開發人員從中心版本庫/服務器上chect out代碼後會在本身的機器上克隆一個本身的版本庫。能夠這樣說,若是你被困在一個不能鏈接網絡的地方時,就像在飛機上,地下室,電梯裏等,你仍然可以提交文件,查看歷史版本記錄,建立項目分支,等。對一些人來講,這好像沒多大用處,但當你忽然遇到沒有網絡的環境時,這個將解決你的大麻煩。vim
3、那什麼狀況推薦使用svn緩存
SVN具備的悲觀鎖的功能,可以實現一個用戶在編輯時對文件進行鎖定,阻止多人同時編輯 一個文件。這一悲觀鎖的功能是 Git 所不具有的。對於以二進制文件 (Word文檔、PPT演示稿) 爲主的版本庫,爲避免多人同時編輯形成合並上的困難, 建議使用SVN作版本控制。bash
4、git工做原理服務器
這邊文章介紹的不錯 Git from the Bottom Up網絡
5、git安裝配置ssh
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.
6、git經常使用命令
== 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以標記合併成功
7、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 -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. |
總結大體以下:
參考文檔: