代碼管理平臺-git

1.安裝:yum install -y gitmysql

建立目錄:mkdir /data/gitrootlinux

進入:cd /data/gitrootgit

初始化:git init //初始化倉庫github

image.png

寫一個測試文件:echo -e  「123\naaa\n456\nbbb」 > 1.txt //建立一個新文件sql

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

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

再次更改1.txtcentos

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

image.png

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


版本回退

多更改幾回1.txt,而後add,commit

git log//查看全部提交記錄

image.png

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

image.png

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

image.png

撤銷修改

rm -f 1.txt//不當心刪除了1.txt

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

image.png

若是1.txt文件修改,add後但沒有commit,再想回退到上一次提交的狀態,

可使用git reset HEAD 1.txt,再執行git checkout -- 1.txt


git reflog //查看全部歷史版本

image.png


刪除文件 

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

git rm 2.txt 

git commit -m "rm 2.txt" 

image.png


創建遠程倉庫

首先到 https://github.com 註冊一個帳號,建立本身的git,點右上角repositories(新建倉庫)再點new

image.png

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

image.png

image.png

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

image.png

image.pngimage.png

linux生成祕鑰:ssh-keygen

左側點New SSH key,把linux機器上的~/.ssh/id_rsa.pub(公鑰)內容粘貼到這裏

image.png

image.png

在服務器/tmp/目錄下建立一個apelearn目錄:mkdir /tmp/apelearn 進入到目錄下 執行官網給的提示命令一步步執行

image.png

把本地倉庫推送到遠程倉庫 git remote add origin git@github.com:aminglinux/studygit.git  //這一步是在遠程建立一個新的倉庫studygit,名字儘可能和本地的一致

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

報錯:

image.png

解決辦法:yum update -y nss curl libcurl

成功

image.png

下一次再推送,就能夠直接 git push

這時候你能夠在服務器上建立一個文件

vim 1.txt ##寫點內容進去

git add 1.txt

git commit -m "1.txt"

image.png

git push ##上傳到遠程庫

image.png

再刷新頁面就有了

image.png


克隆遠程倉庫

隨便進到一個目錄下:cd /home

找到github網站你想克隆的代碼

image.png

複製連接

image.png

拷貝到服務器上:

git clone https://github.com/aminglinux/lanmp.git

image.png

它提示,會在當前目錄下初始化一個倉庫,並建立一個.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 pull把更新完的拉下來


分支

git branch //查看分支 *號表示當前所在的分支

image.png

git branch awei  //建立分支

image.png

git checkout  awei //切換到了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

image.png

若是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分支

image.png

dev分支合併bob分支的命令是:

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

git merge bob


遠程分支

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

查看遠程分支:git ls-remote origin,能夠看到全部分支

image.png

對於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,本地和遠程分支的名稱要一致 ##branch-name是你遠程分支的名字,遠程分支叫什麼就寫什麼

例如:dev分支

image.png


標籤管理


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

git checkout master 先切到master分支上

git tag v1.0  給master打一個標籤v1.0

git show v1.0 查看標籤信息

image.png

git tag 能夠查看全部的標籤

image.png

tag是針對commit來打標籤的,因此能夠針對歷史的commit來打tag

git log --pretty=oneline --abbrev-commit  //先查看歷史的commit

image.png

git tag v0.9 46d3c1a  //針對歷史commit打標籤

image.png

git tag -a v0.8 -m "tag just v1.1 and so on" 5aacaf4  //能夠對標籤進行描述

image.png

git tag -d v0.8  //刪除標籤

遠程標籤查看

image.png

git push origin v1.0   //推送指定標籤到遠程

image.png

推送完再看

image.png

git push --tag origin   //推送全部標籤

若是本地刪除了一個標籤,遠程也想要刪除須要這樣操做:

git tag v1.0 -d    //刪除本地標籤

git push origin :refs/tags/v1.0   //刪除遠程標籤


git別名

git commit 這個命令是否是有點長? 用別名能夠提升咱們的工做效率

別名格式:git config --global alias.別名 初始名

好比吧commit別名稱ci:

git config --global alias.ci commit

如圖

image.png

git config --global alias.co  checkout


git config --global alias.br  branch

image.png

查看git別名使用命令

git config --list |grep alias

image.png

另外一種方式是直接加到配置文件裏:/root/.gitconfig

image.png

查詢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 lg了

image.png

取消別名

git config --global --unset alias.br 


搭建git服務器

github畢竟是公開的,而私有倉庫又得花錢買。因此咱們能夠想辦法搭建一個私有的,只本身公司使用的。Gitlab是個不錯的選擇。在介紹它以前,先講述一下命令行的git服務器

找一臺服務器,首先要安裝git:yum install -y git 

添加git用戶,而且設置shell爲/usr/bin/git-shell,目的是爲了避免讓git用戶遠程登錄

useradd -s /usr/bin/git-shell git 

進到家目錄下:cd /home/git

建立authorized_keys文件,並更改屬主、屬組和權限,用來存客戶端機器上的公鑰

1.mkdir .ssh

2.touch .ssh/authorized_keys

3.chown -R git.git .ssh

4.chmod 600 .ssh/authorized_keys

以上操做目的是讓另外一臺機器能夠經過密鑰進行通訊

把另外一臺機器上的公鑰放到本機(服務端)配置文件裏

/home/git/.ssh/authorized_keys

image.png

試驗一下,用另外一臺連接一下:ssh git@192.168.182.133

image.png

定好存儲git倉庫的目錄,好比/data/gitroot

mkdir /data/gitroot

cd /data/gitroot

git init --bare sample.git // 建立一個裸倉庫

ps:裸倉庫沒有工做區,由於服務器上的Git倉庫純粹是爲了共享,因此不讓用戶直接登陸到服務器上去改工做區,而且服務器上的Git倉庫一般都以.git結尾

image.png

chown -R git.git sample.git ##設置屬主屬組

以上操做是在git服務端上作的,平時git服務器是不須要開發人員登陸修改代碼的,它僅僅是充當着一個服務器的角色,就像github同樣,平時操做都是在咱們本身的pc上作的

首先要把客戶端上的公鑰放到git服務器上/home/git/.ssh/authorized_keys文件裏

在客戶端上(本身pc)克隆遠程倉庫

git clone git@192.168.182.133:/data/gitroot/sample.git

image.png

此時就能夠在當前目錄下生成一個sample的目錄,這個就是咱們克隆的遠程倉庫了。進入到這裏面,能夠開發一些代碼,而後push到遠程。

實驗:

[root@localhost ~]# cd sample/
[root@localhost sample]# ls
[root@localhost sample]# cp /etc/init.d/mysqld . ##隨便拷貝一個文件過來
[root@localhost sample]# ls
mysqld
[root@localhost sample]# git add . ##添加到倉庫
[root@localhost sample]# git ci -m "add new file" 提交(ci是咱們以前對commit設定的別名)
[master(根提交) 028b4a9] add new file
 Committer: root <root@localhost.localdomain>
您的姓名和郵件地址基於登陸名和主機名進行了自動設置。請檢查它們正確
與否。您能夠經過下面的命令對其進行明確地設置以避免再出現本提示信息:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

設置完畢後,您能夠用下面的命令來修正本次提交所使用的用戶身份:

    git commit --amend --reset-author

 1 file changed, 380 insertions(+)
 create mode 100755 mysqld
[root@localhost sample]# git push ##推送到遠程倉庫,這裏會報錯,報錯緣由是由於第一次推送他不知道你要推送哪一個分支,解決辦法指定分支
warning: push.default 未設置,它的默認值將會在 Git 2.0 由 'matching'
修改成 'simple'。若要再也不顯示本信息並在其默認值改變後維持當前使用習慣,
進行以下設置:

  git config --global push.default matching

若要再也不顯示本信息並從如今開始採用新的使用習慣,設置:

  git config --global push.default simple

參見 'git help config' 並查找 'push.default' 以獲取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。若是您有時要使用老版本的 Git,
爲保持兼容,請用 'current' 代替 'simple' 模式)

No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: 沒法推送一些引用到 'git@192.168.182.133:/data/gitroot/sample.git'
[root@localhost sample]# git push origin master ##指定分支,推送成功
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 3.85 KiB | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.182.133:/data/gitroot/sample.git
 * [new branch]      master -> master
[root@localhost sample]#
[root@localhost tmp]# git clone git@192.168.182.133:/data/gitroot/sample.git ##把服務端的庫克隆下來,克隆到tmp下
正克隆到 'sample'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
接收對象中: 100% (3/3), done.
[root@localhost tmp]# ls
apelearn  mysql.sock  sample
[root@localhost tmp]# ls sample/
mysqld
[root@localhost tmp]# cd sample/
[root@localhost sample]# ls
mysqld
[root@localhost sample]# mkdir 222.txt 而後在克隆的庫裏建立一個新文件,隨便寫點東西
[root@localhost sample]# vim 222.txt
[root@localhost sample]# git add 222.txt
[root@localhost sample]# git commit -m "ch 222.txt"
[master 44076d8] ch 222.txt
 Committer: root <root@localhost.localdomain>
您的姓名和郵件地址基於登陸名和主機名進行了自動設置。請檢查它們正確
與否。您能夠經過下面的命令對其進行明確地設置以避免再出現本提示信息:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

設置完畢後,您能夠用下面的命令來修正本次提交所使用的用戶身份:

    git commit --amend --reset-author

 1 file changed, 1 insertion(+)
 create mode 100644 222.txt
[root@localhost sample]# git push ##再把它推送到遠程服務器
warning: push.default 未設置,它的默認值將會在 Git 2.0 由 'matching'
修改成 'simple'。若要再也不顯示本信息並在其默認值改變後維持當前使用習慣,
進行以下設置:

  git config --global push.default matching

若要再也不顯示本信息並從如今開始採用新的使用習慣,設置:

  git config --global push.default simple

參見 'git help config' 並查找 'push.default' 以獲取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。若是您有時要使用老版本的 Git,
爲保持兼容,請用 'current' 代替 'simple' 模式)

Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 280 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.182.133:/data/gitroot/sample.git
   028b4a9..44076d8  master -> master
[root@localhost sample]# pwd
/tmp/sample
[root@localhost sample]# cd /root/sample/ 在進到一開始克隆庫的目錄
[root@localhost sample]# ls
mysqld
[root@localhost sample]# git pull ##拉取文件
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
來自 192.168.182.133:/data/gitroot/sample
   028b4a9..44076d8  master     -> origin/master
更新 028b4a9..44076d8
Fast-forward
 222.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 222.txt
[root@localhost sample]# cat 222.txt 發現是剛剛上傳的222.txt文件 這也是一中方式
akakda
[root@localhost sample]# ls
222.txt  mysqld
[root@localhost sample]#

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

安裝成功,以後他會把你的服務自動啓動起來

image.png

netstat -lnpt  //查看監聽端口

gitlab-ctl stop/restart/start/status ##關閉/重啓/啓動/狀態

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

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

image.png

登陸

image.png

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

image.png

image.png

image.png

image.png

image.png

image.png


gitlab備份  gitlab-rake gitlab:backup:create

image.png

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

image.png

gitlab 恢復數據

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

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

image.png

再啓動服務 gitlab-ctl start 

相關文章
相關標籤/搜索