溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

代碼管理平臺-git

發(fā)布時間:2020-02-28 01:42:13 來源:網(wǎng)絡 閱讀:208 作者:小偉996 欄目:系統(tǒng)運維

1.安裝:yum install -y git

創(chuàng)建目錄:mkdir /data/gitroot

進入:cd /data/gitroot

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

代碼管理平臺-git

寫一個測試文件:echo -e? “123\naaa\n456\nbbb” > 1.txt //創(chuàng)建一個新文件

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

提交:git commit -m "add new file 1.txt"? ?//add完了必須要commit才算真正把文件提交到git倉庫里

再次更改1.txt

查看狀態(tài)git status? //查看當前倉庫中的狀態(tài),比如是否有改動的文件

代碼管理平臺-git

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


版本回退

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

git log//查看所有提交記錄

代碼管理平臺-git

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

代碼管理平臺-git

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

代碼管理平臺-git

撤銷修改

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

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

代碼管理平臺-git

如果1.txt文件修改,add后但沒有commit,再想回退到上一次提交的狀態(tài),

可以使用git reset HEAD 1.txt,再執(zhí)行git checkout -- 1.txt


git reflog //查看所有歷史版本

代碼管理平臺-git


刪除文件?

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

git rm 2.txt?

git commit -m "rm 2.txt"?

代碼管理平臺-git


建立遠程倉庫

首先到 https://github.com 注冊一個賬號,創(chuàng)建自己的git,點右上角repositories(新建倉庫)再點new

代碼管理平臺-git

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

代碼管理平臺-git

代碼管理平臺-git

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

代碼管理平臺-git

代碼管理平臺-git代碼管理平臺-git

linux生成秘鑰:ssh-keygen

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

代碼管理平臺-git

代碼管理平臺-git

服務器/tmp/目錄下創(chuàng)建一個apelearn目錄:mkdir /tmp/apelearn?進入到目錄下?執(zhí)行官網(wǎng)給的提示命令一步步執(zhí)行

代碼管理平臺-git

把本地倉庫推送到遠程倉庫 git remote add origin git@github.com:aminglinux/studygit.git? //這一步是在遠程創(chuàng)建一個新的倉庫studygit,名字盡量和本地的一致

git push -u origin master? //然后把本地的studygit倉庫推送到遠程的studygit

報錯:

代碼管理平臺-git

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

成功

代碼管理平臺-git

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

這時候你可以在服務器上創(chuàng)建一個文件

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

git add 1.txt

git commit -m "1.txt"

代碼管理平臺-git

git push ##上傳到遠程庫

代碼管理平臺-git

再刷新頁面就有了

代碼管理平臺-git


克隆遠程倉庫

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

找到github網(wǎng)站你想克隆的代碼

代碼管理平臺-git

復制鏈接

代碼管理平臺-git

拷貝到服務器上:

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

代碼管理平臺-git

它提示,會在當前目錄下初始化一個倉庫,并創(chuàng)建一個.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 //查看分支 *號表示當前所在的分支

代碼管理平臺-git

git branch awei ?//創(chuàng)建分支

代碼管理平臺-git

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發(fā)現(xiàn)并沒有更改內容,這說明分支與分支之間是相互隔開的


分支的合并

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

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

代碼管理平臺-git

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

解決沖突的方法是在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分支是非常重要的,線上發(fā)布代碼用這個分支,平時我們開發(fā)代碼不要在這個分支上。

創(chuàng)建一個dev分支,專門用作開發(fā),只有當發(fā)布到線上之前,才會把dev分支合并到master

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

代碼管理平臺-git

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

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

git merge bob


遠程分支

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

查看遠程分支:git ls-remote origin,可以看到所有分支

代碼管理平臺-git

對于git push分支分兩種情況

當本地分支和遠程分支一致時

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

當本地分支比遠程分支多,默認git push 只推送本地和遠程一致的分支,想要把多出來的本地分支推送到遠程時,使用git push origin branch-name? 如果推送失敗,先用git pull抓取遠程的新提交

git clone的時候默認只把master分支克隆下來,如果想把所有分支都克隆下來,需要手動創(chuàng)建,在本地創(chuàng)建和遠程分支對應的分支,

使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱要一致 ##branch-name是你遠程分支的名字,遠程分支叫什么就寫什么

例如:dev分支

代碼管理平臺-git


標簽管理


標簽類似于快照功能,可以給版本庫打一個標簽,記錄某個時刻庫的狀態(tài)。也可以隨時恢復到該狀態(tài)。

git checkout master 先切到master分支上

git tag v1.0? 給master打一個標簽v1.0

git show v1.0 查看標簽信息

代碼管理平臺-git

git tag 可以查看所有的標簽

代碼管理平臺-git

tag是針對commit來打標簽的,所以可以針對歷史的commit來打tag

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

代碼管理平臺-git

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

代碼管理平臺-git

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

代碼管理平臺-git

git tag -d v0.8? //刪除標簽

遠程標簽查看

代碼管理平臺-git

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

代碼管理平臺-git

推送完再看

代碼管理平臺-git

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

如圖

代碼管理平臺-git

git config --global alias.co? checkout


git config --global alias.br? branch

代碼管理平臺-git

查看git別名使用命令

git config --list |grep alias

代碼管理平臺-git

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

代碼管理平臺-git

查詢log小技巧:直接在命令行執(zhí)行

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"

執(zhí)行完就可以執(zhí)行git?lg了

代碼管理平臺-git

取消別名

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

創(chuàng)建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

代碼管理平臺-git

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

代碼管理平臺-git

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

mkdir /data/gitroot

cd /data/gitroot

git init --bare sample.git // 創(chuàng)建一個裸倉庫

ps:裸倉庫沒有工作區(qū),因為服務器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到服務器上去改工作區(qū),并且服務器上的Git倉庫通常都以.git結尾

代碼管理平臺-git

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

以上操作是在git服務端上做的,平時git服務器是不需要開發(fā)人員登錄修改代碼的,它僅僅是充當著一個服務器的角色,就像github一樣,平時操作都是在我們自己的pc上做的

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

在客戶端上(自己pc)克隆遠程倉庫

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

代碼管理平臺-git

此時就可以在當前目錄下生成一個sample的目錄,這個就是我們克隆的遠程倉庫了。進入到這里面,可以開發(fā)一些代碼,然后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>
您的姓名和郵件地址基于登錄名和主機名進行了自動設置。請檢查它們正確
與否。您可以通過下面的命令對其進行明確地設置以免再出現(xiàn)本提示信息:

????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

若要不再顯示本信息并從現(xiàn)在開始采用新的使用習慣,設置:

??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?然后在克隆的庫里創(chuàng)建一個新文件,隨便寫點東西
[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>
您的姓名和郵件地址基于登錄名和主機名進行了自動設置。請檢查它們正確
與否。您可以通過下面的命令對其進行明確地設置以免再出現(xiàn)本提示信息:

????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

若要不再顯示本信息并從現(xiàn)在開始采用新的使用習慣,設置:

??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?發(fā)現(xiàn)是剛剛上傳的222.txt文件?這也是一中方式
akakda
[root@localhost?sample]#?ls
222.txt??mysqld
[root@localhost?sample]#

使用gitlab

gitlab官網(wǎng) 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?

安裝成功,之后他會把你的服務自動啟動起來

代碼管理平臺-git

netstat -lnpt? //查看監(jiān)聽端口

gitlab-ctl stop/restart/start/status ##關閉/重啟/啟動/狀態(tài)

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

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

代碼管理平臺-git

登錄

代碼管理平臺-git

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

代碼管理平臺-git

代碼管理平臺-git

代碼管理平臺-git

代碼管理平臺-git

代碼管理平臺-git

代碼管理平臺-git


gitlab備份? gitlab-rake gitlab:backup:create

代碼管理平臺-git

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

代碼管理平臺-git

gitlab 恢復數(shù)據(jù)

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

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

代碼管理平臺-git

再啟動服務 gitlab-ctl start?


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI