成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

GIT版本管理-創(chuàng)新互聯(lián)

本文為個人整理筆記,參考與廖雪峰老師的官方GIT教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

創(chuàng)新互聯(lián)-專業(yè)網站定制、快速模板網站建設、高性價比永善網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式永善網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋永善地區(qū)。費用合理售后完善,十載實體公司更值得信賴。

在之前的GIT入門介紹中,我們了解了本地一些GIT操作的命令和原理,在這一節(jié)將一起學習一下GIT遠程管理和版本管理的相關內容。

遠程倉庫

如果要在github上管理我們的代碼,并在本地進行修改提交就需要了解git 遠程倉庫的相關內容。github是git官方提供的一個代碼托管平臺,個人可以申請免費的,但是所上傳的內容可以方便大家共享,如果要使用私密倉庫,需要付費。

在github上添加SSH KEY:

在github上注冊好賬戶之后,添加本機的SSH公鑰,這樣在本地在對遠程倉庫操作時就不用頻繁的使用賬號密碼。

ssh-keygen -t rsa -C "youremail@example.com"

一路默認回車之后,cat .ssh/id_rsa.pub ,然后將cat的內容添加到賬戶的SSH Key中。

創(chuàng)建第一個個人倉庫

首先在github上注冊一個個人賬戶,在New repository中直接輸入新建倉庫的名稱即可。根據提示使用SSH的方法在本地添加一個個人倉庫:

git remote add origin git@github.com:YourName/gitrepo.git
git push -u origin master  # -u更新所有分支 origin默認遠程倉庫名稱

當?shù)谝淮瓮搅怂械谋镜匚募?,在對文件做了commit,就可以直接使用:

git push origin master

這樣就直接將本地更新的文件推到了遠程管理庫。

從遠程倉庫克隆

github上有很多很優(yōu)秀的代碼和應用,如果我們要是用別人的代碼,直接可以用git clone命令將代碼拉到我們本地,如果是自己的代碼庫可以直接拉?。?/p>

 git clone git@github.com:YourName/gitrepo.git

分支管理

在進行開發(fā)的過程中,很多情況下我們需要對分支進行管理。例如,如果是本地對一個文件進行修改,那么這個文件就是線性的修改方式,如果要對多個文件進行多次修改,而且不同的修改最終會確認一個最終的版本,最終合并的這個分支就是這個文件的最終版本,需要注意的是,只有當執(zhí)行了commit 命令之后,本地的master分支才會建立。

創(chuàng)建并切換分支:

git branche dev    #創(chuàng)建dev分支
git checkout dev   #切換分支到dev
===============
git checkout -b dev    # 創(chuàng)建并切換分支, 一條命令搞定

查看分支:

git branch

對分支修改后git add , git commit 之后就可切換到master分支上合并。

合并dev到master分支:

git merge dev

刪除分支:

git branch -d dev

當在兩個分支上同時修改了文件并且提交后,在git合并時就會出現(xiàn)沖突的報錯。這是因為當我們在合并的時候程序也不知道我們到底需要更新哪一個,這就需要我們手動去更新文件,解決沖突。然后再合并。

[root@work gitrepo]# git merge test # 在master和test分支上都commit后,再merge會報錯
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
[root@work gitrepo]# cat readme.txt 
test
<<<<<<< HEAD              #查看編輯的文件,系統(tǒng)對我們手動要修改的地方做了標注
this is master 
=======
this is test 
>>>>>>> test

修改文件統(tǒng)一后,再次執(zhí)行git add 和git commit就可以解決沖突了:

[root@work gitrepo]# git log --graph  --pretty=oneline --abbrev-commit
*   52ed4df confilt
|\  
| * 310f7e7 IT        # 顯示了一個分支的修改
* | a8fa78b master
|/  
* b040742 test

用git log --graph命令可以看到分支合并圖。

合并分支時,默認使用的是fast forward模式,但是使用這種模式是不記錄其它分支的修改日志的,在實際應用中,為了更加清楚分支上的修改時間,需要加上--no-ff參數(shù),可以用普通模式合并,合并后的歷史有分支,能看出來曾經做過合并,而fast forward合并就看不出來曾經做過合并。

在一般的開發(fā)過程中大豆會有如下流程:

1、leader在遠程倉庫創(chuàng)建2個分支:master和dev

2、張三和李四克隆遠程倉庫到本地

3、張三和李四都切換到dev分支

4、張三創(chuàng)建分支z3,李四創(chuàng)建分支l4

5、開發(fā)完成后,張三合并z3到dev,李四合并l4到dev

6、張三和李四把本地庫的dev分支推送到遠程dev

7、leader拉取遠程庫里的dev和masterd,在本地將dev合并到master 并推送到遠程master

BUG分支管理

如果當前正在dev分支上開發(fā),突然線上出了一個BUG,需要立即修復,這時候我需要暫時隱藏當前的工作,也就是保存當前dev分支上的進度 git statsh:

[root@work gitrepo]# git stash
Saved working directory and index state WIP on dev: f241242 test
HEAD is now at f241242 test

[root@work gitrepo]# git status  #隱藏工作區(qū)之后,顯示的工作目錄為空了
# On branch dev
nothing to commit, working directory clean

保存了當前的工作后,我們就要去修復線上的bug了,切換到master分支,并創(chuàng)建一個修復的issue分支:

[root@work gitrepo]# git checkout master
Switched to branch 'master'
[root@work gitrepo]# git checkout -b issue
Switched to a new branch 'issue'
[root@work gitrepo]# git branch
  dev
* issue
  master

在issue上完成修復工作后,執(zhí)行git add ,git commit 提交代碼,然后在master上合并issue分支上的代碼刪除issue分支:

[root@work gitrepo]# git branch
  dev
* issue
  master
[root@work gitrepo]# git add readme.txt 
[root@work gitrepo]# git commit -m "fix issue"
[issue 8b29da7] fix issue
 1 file changed, 1 insertion(+)
 
[root@work gitrepo]# git checkout master # 回到master上合并issue分支
Switched to branch 'master'
[root@work gitrepo]# git merge --no-ff -m "fix bug issue" issue # 記錄分支日志信息
Merge made by the 'recursive' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)
 
[root@work gitrepo]# git branch -d issue  #刪除issue分支
Deleted branch issue (was 8b29da7).

bug修復完成之后,我們要回到自己的dev分支繼續(xù)我們的工作了:

[root@work gitrepo]# git checkout dev
Switched to branch 'dev'

[root@work gitrepo]# git status # 原來的dev分支是空的
# On branch dev
nothing to commit, working directory clean

[root@work gitrepo]# git stash list # 查看我們隱藏的分支
stash@{0}: WIP on dev: f241242 test

[root@work gitrepo]# git stash pop # 顯示出隱藏的分支,并將隱藏的分支刪除
# On branch dev
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   file.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (5a7f46b8a24f1a557a37b0378ee75c65387e024a)

[root@work gitrepo]# git status
# On branch dev
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   file.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

恢復隱藏的分支有兩種方法:

git stash apply  # 恢復隱藏的分支

git stash drop   # 刪除隱藏的分支記錄

============================

git statsh pop  # 恢復隱藏的分支,并將隱藏的分支刪除,用一條命令做上面兩條命令的事情。

tips:

如果要開發(fā)一個新的特性,最好新建一個分支,如果開發(fā)的新分支完成一半需要刪除(此時還沒有提交)刪除一個未提交的分支,可以使用git branch -D BranchName 強制刪除。

多人協(xié)作分支管理

在進行多人協(xié)作開發(fā)的團隊中,由于每個人都會去不斷的修改文件,合并文件,就會出現(xiàn)當你想遠程提交自己的代碼時,碰巧別人也修改了相同的文件,這樣你本地的文件和遠程的文件內容就不一樣了,需要手動解決沖突再進行提交。

[root@work gitrepo]# git remote  # 查看遠程分支
origin
[root@work gitrepo]# git remote -v # 查看遠程分支詳細信息
origin  git@github.com:AndySkyL/gitrepo.git (fetch)
origin  git@github.com:AndySkyL/gitrepo.git (push)

提交是出現(xiàn)沖突:

[root@work gitrepo]# git add readme.txt 
[root@work gitrepo]# git commit -m "dev2"
[dev 41ad4f8] dev2
 1 file changed, 1 insertion(+), 3 deletions(-)
 
[root@work gitrepo]# git push origin dev   # 推送dev分支沖突

▽! [rejected]        dev -> dev (fetch first)
error: failed to push some refs to 'git@github.com:AndySkyL/gitrepo.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first merge the remote changes (e.g.,
hint: 'git pull') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

[root@work gitrepo]# git pull   # 根據提示使用git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:AndySkyL/gitrepo
 * [new branch]      dev        -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
    git pull <remote> <branch>     
If you wish to set tracking information for this branch you can do so with:
    git branch --set-upstream-to=origin/<branch> dev   # 這里已經給出提示
    
[root@work gitrepo]# git branch --set-upstream-to=origin/dev dev 
Branch dev set up to track remote branch dev from origin.

[root@work gitrepo]# git pull  #執(zhí)行此命令之后再按照之前的方式修改文件,解決沖突
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

解決沖突后提交:

[root@work gitrepo]# git add readme.txt 
[root@work gitrepo]# git commit -m "fix m"
[dev 3267ad5] fix m

[root@work gitrepo]# git push origin dev
Counting objects: 10, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 570 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
   17a9b60..3267ad5  dev -> dev

從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;

在本地創(chuàng)建和遠程分支對應的分支,使用

git checkout -b branch-name origin/branch-name 
# 本地和遠程分支的名稱最好一致;

建立本地分支和遠程分支的關聯(lián),使用:

git branch --set-upstream-to=origin/dev dev

標簽管理

  • 標簽可以是每一次commit 的標識,類似于給每次commit添加一個別名:

[root@work gitrepo]# git branch
  dev
* master
[root@work gitrepo]# git tag v1.0
[root@work gitrepo]# git tag
v1.0

默認標簽是打在最新提交的commit上的。

  • 如果要對之前的某一次commit打標簽后面直接接上commit ID即可:

[root@work gitrepo]# git log --pretty=oneline --abbrev-commit
e2ce160 fix bug issue
8b29da7 fix issue
881136a fix bug example
[root@work gitrepo]# git tag v0.9 881136a  #根據log 對對應的commit打標簽,可以使用-m
[root@work gitrepo]# git tag               #添加說明
v0.9                                       # git標簽的排列默認是以標簽名的字母順序排列的
v1.0
  • 使用tag查看具體信息:

[root@work gitrepo]# git show v1.0
commit e2ce160ad30d5433c033d9be7dc5dfe23ddbfd6d
Merge: 881136a 8b29da7
Author: trying <trying@example.com>
Date:   Wed Dec 14 16:16:32 2016 +0800
    fix bug issue
  • 也可以在新建tag時添加說明:

 git tag -a v2.0 -m "version 2.0 released"   # -a 指定tag名稱 -m 添加說明
  • 刪除標簽

# git tag -d v2.0
Deleted tag 'v2.0' (was 959f8b1)
  • 推送標簽到遠程

    由于在本地添加的標簽不會自動推送到遠程,如果需要推送本地的標簽到遠程,使用git push origin tagname:

# git push origin v1.0    # 推送指定的tag
# git push origin --tags  # 一次推送所有的tag
  • 刪除遠程標簽

刪除遠程標簽需要先刪除本地標簽:

# git tag
v0.9
v1.0

# git tag -d v0.9    # 刪除本地tag
Deleted tag 'v0.9' (was 881136a)

# git push origin :refs/tags/v0.9   # 刪除遠程標簽
 - [deleted]         v0.9

git push origin :refs/tags/tagname

GIT高亮顯示字體顏色:

# git config --global color.ui true

搭建GIT服務器

如果自己不想使用github的付費倉庫,可以自己搭建一個私有的git 服務器供企業(yè)內部使用。

安裝git:

yum install git -y

創(chuàng)建一個git用戶:

useradd git

禁止git 用戶登錄shell,編輯/etc/passwd文件,將git用戶默認的shell改為:

git:x:823:823::/home/git:/usr/bin/git-shell

創(chuàng)建一個用于GIT倉庫的目錄:

mkdir /gitrepo
cd /gitrepo

初始化git倉庫:

git init --bare  test.git

在/home/git用戶的目錄下創(chuàng)建密鑰認證文件authorized_keys ,將本地的公鑰導入服務端的authorized_keys 文件中:

cat id_rsa.pub  > /home/git/.ssh/authorized_keys

然回到本地,就可以獲取git服務器上的工作目錄了:

[root@work ~]# git clone git@172.16.1.10:/gitrepo/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.

這就可以和在github上一樣操作了。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章標題:GIT版本管理-創(chuàng)新互聯(lián)
文章分享:http://jinyejixie.com/article46/pcphg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網站、網站建設、用戶體驗、ChatGPT、微信公眾號、網站排名

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站托管運營
西乌| 垣曲县| 铜梁县| 乃东县| 吴堡县| 鄯善县| 广昌县| 山西省| 新民市| 永仁县| 天门市| 和林格尔县| 榆树市| 黄陵县| 招远市| 沐川县| 宿州市| 申扎县| 霞浦县| 宜都市| 阿图什市| 荔浦县| 吉林市| 沾化县| 凤翔县| 浦东新区| 尼玛县| 独山县| 台南市| 时尚| 曲周县| 大宁县| 文安县| 静海县| 寿阳县| 高尔夫| 探索| 冕宁县| 三门峡市| 宁化县| 印江|