天天看點

代碼管理平台

你要了解的常識

版本控制,記錄若幹檔案内容變化,以便将來查閱特定版本修訂情況

版本管理工具發展簡史,cvs svn  git 參考http://luckypoem14.github.io/test/2012/04/24/scm-history/

svn全稱subversion,是一個開源版本控制系統,始于2000年

git是linux創始人linus發起的,2005年釋出,最初目的是更好管理linux核心代碼

git和svn不同在于git不需要依賴服務端就可以工作,即git是分布式的

關于git和svn的比較大家參考http://blog.lishiming.net/?p=305

github是基于git的線上web頁面代碼托管平台,可以選擇付費服務

gitlab可以認為是一個開源的github,兩者沒有直接關系

安裝svn

yum install -y subversion

建立版本庫

mkdir -p /data/svnroot/myproject

svnadmin create /data/svnroot/myproject

cd !$/conf #authz為權限配置檔案,passwd為密碼檔案

vim authz//配置檔案改為如下

[groups]

admins = aming,user1

[/]

@admins = rw

*= r

[myproject:/]

user1 = rw

vim passwd//加入如下内容

[users]

aming = aming!(*$123

user1 = user1^^^123

user2 = user2-***123

vim svnserver.conf//更改或增加如下内容

[general]

anon-access = none

auth-access = write

password-db = passwd

authz-db = authz

realm = /data/svnroot/myproject

svnserve -d -r /data/svnroot //這樣就啟動了

用戶端上使用svn(linux)

yum install -y subversion

svn checkout svn://192.168.133.130/myproject --username=aming

cd myproject ; ls -la

cp /etc/fstab .

svn add . //添加到版本控制中心

svn commit -m “add file” //把檔案上傳到伺服器

svn delete filename //在本地删除

svn commit -m “delete filename” //在伺服器上删除

svn update //把目前目錄下的檔案都更新到最新版

svn log //檢視變更日志

用戶端上使用svn(windows)

官網 https://tortoisesvn.net/index.zh.html

下載下傳TortoiseSVN 并安裝

簡明教程 http://www.jianshu.com/p/6b3b7b915332

單機上使用git

版本回退

多更改幾次1.txt,然後add,commit

git log//檢視所有送出記錄

git log --pretty=oneline//一行顯示

git reset --hard f7c8e9//回退版本,其中後面跟的字元串是簡寫

撤銷修改

rm -f 1.txt//不小心删除了1.txt

git checkout -- 1.txt//恢複1.txt

如果1.txt檔案修改,add後但沒有commit,再想回退到上一次送出的狀态,可以使用git reset HEAD 1.txt,再執行git checkout -- 1.txt

git reflog //檢視所有曆史版本

删除檔案

echo -e "11111111111\n2222222222" > 2.txt

git rm 2.txt

git commit -m "rm 2.txt"

建立遠端倉庫

首先到 https://github.com 注冊一個賬号,建立自己的git,點repositories 再點new

名字自定義,比如叫studygit 選擇public 點 create repository

添加key:右上角點自己頭像,選擇settings,左側選擇SSH and GPG keys

左側點New SSH key,把linux機器上的~/.ssh/id_rsa.pub内容粘貼到這裡

把本地倉庫推送到遠端倉庫 git remote add origin [email protected]:aminglinux/studygit.git //這一步是在遠端建立一個新的倉庫studygit,名字盡量和本地的一緻

git push -u origin master //然後把本地的studygit倉庫推送到遠端的studygit

下一次再推送,就可以直接 git push

克隆遠端倉庫

cd /home

git clone [email protected]:aminglinux/lanmp.git

它提示,會在目前目錄下初始化一個倉庫,并建立一個.git的目錄,如下

Initialized empty Git repository in /home/lanmp/.

git/完成後,ls可以看到一個lanmp的目錄

cd lanmp

vi lanmp.sh 編輯一下檔案,然後送出

git add lanmp.sh

git commit -m "sdlfasdf"

然後再推送到遠端服務端

git push

分支

git branch //檢視分支

git branch aming //建立分支

git checkout aming //切換到了aming分支下

再用git branch檢視,會看到有兩個分支master和aming,目前使用的分支前面會有一個*在aming分支下 ,編輯2.txt,并送出到新分支

echo "askdfjlksadjflk" > 2.txt

git add 2.txt

git commit -m "laksjdflksjdklfj"

切換回master分支

git checkout master //此時cat 2.txt發現并沒有更改内容

分支的合并

git checkout master //合并分支之前,先切換到目标分支

git merge aming //把aming分支合并到了master

如果master分支和aming分支都對2.txt進行了編輯,當合并時會提示沖突,需要先解決沖突才可以繼續合并。

解決沖突的方法是在master分支下,編輯2.txt,改為aming分支裡面2.txt的内容。 然後送出2.txt,再合并aming分支。

但是這樣有一個問題,萬一master分支更改的内容是我們想要的呢? 可以編輯2.txt内容,改為想要的,然後送出。切換到aming分支,然後合并master分支到aming分支即可(倒着合并)。合并分支有一個原則,那就是要把最新的分支合并到舊的分支。也就是說merge後面跟的分支名字一定是最新的分支。

git branch -d aming //删除分支

如果分支沒有合并,删除之前會提示,那就不合并,強制删除

git branch -D aming

使用分支的原則

對于分支的應用,建議大家以這樣的原則來:

master分支是非常重要的,線上釋出代碼用這個分支,平時我們開發代碼不要在這個分支上。

建立一個dev分支,專門用作開發,隻有當釋出到線上之前,才會把dev分支合并到master

開發人員應該在dev的基礎上再分支成個人分支,個人分支(在自己pc上)裡面開發代碼,然後合并到dev分支

dev分支合并bob分支的指令是:

git checkout dev //先切換到dev分支,然後

git merge bob

遠端分支

本地建立的分支如果不推送到遠端,對其他人就是不可見的

檢視遠端分支 git ls-remote origin,可以看到所有分支

對于git push分支分兩種情況

當本地分支和遠端分支一緻時

git push會把所有本地分支的變更一同推送到遠端,如果想隻推送一個分支,使用git push origin branch-name

當本地分支比遠端分支多,預設git push 隻推送本地和遠端一緻的分支,想要把多出來的本地分支推送到遠端時,使用git push origin branch-name 如果推送失敗,先用git pull抓取遠端的新送出

git clone的時候預設隻把master分支克隆下來,如果想把所有分支都克隆下來,需要手動建立,在本地建立和遠端分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠端分支的名稱要一緻

标簽管理

标簽類似于快照功能,可以給版本庫打一個标簽,記錄某個時刻庫的狀态。也可以随時恢複到該狀态。

git checkout master 先切到master分支上

git tag v1.0 給master打一個标簽v1.0

git show v1.0 檢視标簽資訊

git tag 可以檢視所有的标簽

tag是針對commit來打标簽的,是以可以針對曆史的commit來打tag

git log --pretty=oneline --abbrev-commit //先檢視曆史的commit

git tag v0.9 46d3c1a //針對曆史commit打标簽

git tag -a v0.8 -m "tag just v1.1 and so on" 5aacaf4 //可以對标簽進行描述

git tag -d v0.8 //删除标簽

git push origin v1.0 //推送指定标簽到遠端

git push --tag origin //推送所有标簽

如果本地删除了一個标簽,遠端也想要删除需要這樣操作:

git tag v1.0 -d //删除本地标簽

git push origin :refs/tags/v1.0 //删除遠端标簽

git别名

git commit 這個指令是不是有點長? 用别名可以提高我們的工作效率

git config --global alias.ci commit

git config --global alias.co checkout

git config --global alias.br branch

檢視git别名使用指令

git config --list |grep alias

查詢log小技巧:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

取消别名

git config --global --unset alias.br

繼續閱讀