0718 預習任務

22.1 代碼管理平臺介紹

版本控制,記錄若干文件內容變化,以便將來查閱特定版本修訂情況

版本管理工具發展簡史,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,兩者沒有直接關係


22.2 安裝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 //這樣就啓動了



22.3 客戶端上使用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 //查看變更日誌


22.4 客戶端上使用svn(windows)

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

 下載TortoiseSVN 並安裝

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


22.5/22.6 單機上使用git

yum install -y git

 mkdir /data/gitroot

 cd /data/gitroot

 git init //初始化倉庫

 echo -e  “123\naaa\n456\nbbb” > 1.txt //創建一個新文件

 git add 1.txt//把1.txt添加到倉庫

 git commit -m “add new file 1.txt”   //add完了必須要commit纔算真正把文件提交到git倉庫裏

 再次更改1.txt

 git status  //查看當前倉庫中的狀態,比如是否有改動的文件

 git diff 1.txt  //可以對比1.txt本次修改了什麼內容,相比較倉庫裏面的版本


 版本回退

 多更改幾次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"


22.7 建立遠程倉庫

 首先到 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 


22.8 克隆遠程倉庫

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


22.9 分支管理

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


22.10 遠程分支管理

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

 查看遠程分支  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,本地和遠程分支的名稱要一致


22.11 標籤管理

 標籤類似於快照功能,可以給版本庫打一個標籤,記錄某個時刻庫的狀態。也可以隨時恢復到該狀態。

 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   //刪除遠程標籤


22.12 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 


22.13 搭建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


22.14/22.15 安裝gitlab

 定好存儲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到遠程。


22.16 使用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


22.17 gitlab備份和恢復

 netstat -lnpt  //查看監聽端口

 gitlab-ctl stop/restart/start/status

 瀏覽器訪問gitlab,輸入ip即可

 默認管理員root,無密碼,它會讓我們去定義一個密碼

 gitlab常用命令  https://www.cnyunwei.cc/archives/1204

 gitlab備份  gitlab-rake gitlab:backup:create

 備份目錄在/var/opt/gitlab/backups

 gitlab 恢復  先停服務 gitlab-ctl stop unicorn ; gitlab-ctl stop sidekiq

 gitlab-rake gitlab:backup:restore BACKUP=xxxxx (這裏是一個編號,即備份文件的前綴)

 再啓動服務 gitlab-ctl start


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章