你要了解的常識html
版本控制,記錄若干文件內容變化,以便未來查閱特定版本修訂狀況
版本管理工具發展簡史,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,二者沒有直接關係linux
安裝svngit
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 = rwgithub
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 //這樣就啓動了web
客戶端上使用svn(linux)shell
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 //查看變動日誌vim
客戶端上使用svn(windows)windows
官網 https://tortoisesvn.net/index.zh.html
下載TortoiseSVN 並安裝
簡明教程 http://www.jianshu.com/p/6b3b7b915332centos
單機上使用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 git@github.com:aminglinux/studygit.git //這一步是在遠程建立一個新的倉庫studygit,名字儘可能和本地的一致
git push -u origin master //而後把本地的studygit倉庫推送到遠程的studygit
下一次再推送,就能夠直接 git push
克隆遠程倉庫
cd /home
git clone git@github.com: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
搭建git服務器
github畢竟是公開的,而私有倉庫又得花錢買。因此咱們能夠想辦法搭建一個私有的,只本身公司使用的。Gitlab是個不錯的選擇。在介紹它以前,先講述一下命令行的git服務器
找一臺服務器,首先要安裝git,yum install git
添加git用戶,而且設置shell爲/usr/bin/git-shell,目的是爲了避免讓git用戶遠程登錄
useradd -s /usr/bin/git-shell git
cd /home/git
建立authorized_keys文件,並更改屬主、屬組和權限,用來存客戶端機器上的公鑰
mkdir .ssh
touch .ssh/authorized_keys
chown -R git.git .ssh
chmod 600 .ssh/authorized_keys
定好存儲git倉庫的目錄,好比 /data/gitroot
mkdir /data/gitroot
cd /data/gitroot
git init --bare sample.git // 會建立一個裸倉庫,裸倉庫沒有工做區,由於服務器上的Git倉庫純粹是爲了共享,因此不讓用戶直接登陸到服務器上去改工做區,而且服務器上的Git倉庫一般都以.git結尾
chown -R git.git sample.git
以上操做是在git服務器上作的,平時git服務器是不須要開發人員登陸修改代碼的,它僅僅是充當着一個服務器的角色,就像github同樣,平時操做都是在咱們本身的pc上作的
首先要把客戶端上的公鑰放到git服務器上/home/git/.ssh/authorized_keys文件裏
在客戶端上(本身pc)克隆遠程倉庫
git clone git@ip:/data/gitroot/sample.git
此時就能夠在當前目錄下生成一個sample的目錄,這個就是咱們克隆的遠程倉庫了。進入到這裏面,能夠開發一些代碼,而後push到遠程。
使用gitlab
gitlab官網 https://about.gitlab.com/gitlab-com/
官方安裝文檔 https://about.gitlab.com/installation/?version=ce#centos-7 (ce/ee)
要求服務器內存很多於2g
vim /etc/yum.repos.d/gitlab.repo//加入以下內容
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
yum install -y gitlab-ce
gitlab-ctl reconfigure
netstat -lnpt //查看監聽端口
gitlab-ctl stop/restart/start/status
瀏覽器訪問gitlab,輸入ip便可
默認管理員root,無密碼,它會讓咱們去定義一個密碼
gitlab經常使用命令 https://www.cnyunwei.cc/archives/1204gitlab備份 gitlab-rake gitlab:backup:create備份目錄在/var/opt/gitlab/backupsgitlab 恢復 先停服務 gitlab-ctl stop unicorn ; gitlab-ctl stop sidekiqgitlab-rake gitlab:backup:restore BACKUP=xxxxx (這裏是一個編號,即備份文件的前綴)再啓動服務 gitlab-ctl start