學(xué)習(xí)使用git

一、Git概述

1、什么是Git

  • 官方網(wǎng)站:https://git-scm.com/
  • Git是一個(gè)免費(fèi)和開(kāi)源分布式版本控制系統(tǒng)筐眷,設(shè)計(jì)用于處理從很小到非常大的項(xiàng)目,有著優(yōu)異的速度和效率钓账。
  • Git是容易學(xué)習(xí)和有一個(gè)很小的投入得到閃電般的速度性能。它勝于SCM工具像Subversion,CVS,必然地,像廉價(jià)的本地分支和ClearCase功能,方便的暫存區(qū),多個(gè)工作流践磅。

2、Git的特點(diǎn)

  • Git允許和支持有多個(gè)本地分支,可以完全相互獨(dú)立的灸异。創(chuàng)建府适、合并和刪除線的開(kāi)發(fā)只需要幾秒鐘。
  • Git的速度快肺樟,幾乎所有的操作都是在本地執(zhí)行,給它一個(gè)巨大的速度優(yōu)勢(shì)在集中式系統(tǒng),不斷地與服務(wù)器進(jìn)行通信檐春。
  • Git,是分布式的,擁有任何分布式SCM的最好的特性之一么伯。不僅可以獲得最新版本,也可以“克隆”整個(gè)存儲(chǔ)庫(kù)疟暖。
  • Git使用的數(shù)據(jù)模型可以確保每一個(gè)項(xiàng)目的加密完整性。每個(gè)文件和提交由其校驗(yàn)和校驗(yàn)和和檢索時(shí)檢查出來(lái)田柔。
  • Git有“暫存區(qū)域”或“索引”概念俐巴,這是一個(gè)中間區(qū)域可以格式化并提交審核之前完成提交,可在您的工作目錄或在命令行上列出提交和未提交修改的文件硬爆。
  • Git是開(kāi)源免費(fèi)的欣舵,GNU通用公共許可證下發(fā)布的2.0版本,這是一個(gè)開(kāi)放源碼許可。

3缀磕、Git的用途

  • 版本控制工具缘圈;
  • 本地版本控制系統(tǒng)
  • 集中化的版本控制系統(tǒng)
  • 分布式的版本控制系統(tǒng)
源代碼版本控制分類(lèi)

4劣光、Git的工作區(qū)

  • 工作區(qū):Working Directory工作目錄
  • 暫存區(qū):Staging Area 索引
  • 版本庫(kù):Repository 將暫存區(qū)文件提交到版本庫(kù)中


    image.png

5、Git配置文件:git config

(1)配置文件對(duì)應(yīng)的有效范圍
Git倉(cāng)庫(kù)特有配置文件:REPO/.git/config
  • 有效范圍:對(duì)當(dāng)前用戶(hù)的當(dāng)前一個(gè)倉(cāng)庫(kù)都有效
Git全局配置文件:~/.gitconfig, --global
  • 有效范圍:對(duì)當(dāng)前用戶(hù)的所有倉(cāng)庫(kù)都有效
系統(tǒng)Git配置文件:/etc/git/gitconfig, -system
  • 有效范圍:對(duì)所有用戶(hù)所有倉(cāng)庫(kù)都有效
(2)必須設(shè)定配置中的兩項(xiàng):
  • user.name代表user端的name參數(shù)中間用點(diǎn)號(hào)隔開(kāi)
  • user.email代表user段的email參數(shù)中間用點(diǎn)號(hào)隔開(kāi)

示例:添加全局配置的用戶(hù)名

#查詢(xún)配置信息
[root@node-65 testproj]# git config -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
#添加全局配置的用戶(hù)名
[root@node-65 testproj]# git config --global user.name hehe
#添加全局配置的用戶(hù)郵箱
[root@node-65 testproj]# git config --global user.email hehe@hehe.com
[root@node-65 testproj]# git config -l
user.name=hehe
user.email=hehe@hehe.com
.....

#用戶(hù)家目錄下將生成.gitconfig文件
[root@node-65 testproj]# cat ~/.gitconfig 
[user]
    name = hehe
    email = hehe@hehe.com

二糟把、Git的對(duì)象類(lèi)型

Git的對(duì)象類(lèi)型: .git/objects是個(gè)隱藏目錄

1赎线、塊(blob)對(duì)象:文件的每個(gè)版本表現(xiàn)為一個(gè)塊(blob);

blob對(duì)象

2糊饱、樹(shù)(tree)對(duì)象:一個(gè)目錄代表一層目錄信息垂寥;

tree對(duì)象

3、提交(commit)對(duì)象:用于保存版本庫(kù)一次變化的元數(shù)據(jù)另锋,包括作者滞项、郵箱、提交日期夭坪、日志文判;每個(gè)提交對(duì)象都指定一個(gè)目錄樹(shù)對(duì)象;

提交對(duì)象

4室梅、標(biāo)簽(tag)對(duì)象:用于給一個(gè)特定對(duì)象一個(gè)易讀的名稱(chēng)戏仓;

標(biāo)簽對(duì)象

提交流程中的對(duì)象種類(lèi)

提交流程工作原理

三、安裝Git和命令使用

1亡鼠、Git的安裝

  • 安裝并手動(dòng)創(chuàng)建工作目錄
[root@node-65 ~]# yum install git -y
[root@node-65 ~]# mkdir testproj
[root@node-65 ~]# cd testproj/
  • git初始化
[root@node-65 testproj]# git init
Initialized empty Git repository in /root/testproj/.git/
  • 生成工作目錄
[root@node-65 testproj]# ls -a
.  ..  .git
[root@node-65 testproj]# tree .git
.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│?? ├── applypatch-msg.sample
│?? ├── commit-msg.sample
│?? ├── post-update.sample
│?? ├── pre-applypatch.sample
│?? ├── pre-commit.sample
│?? ├── prepare-commit-msg.sample
│?? ├── pre-push.sample
│?? ├── pre-rebase.sample
│?? └── update.sample
├── info
│?? └── exclude
├── objects
│?? ├── info
│?? └── pack
└── refs
    ├── heads
    └── tags



2赏殃、Git中的文件分類(lèi)和命令

Git中的文件分為三類(lèi):

  • 已追蹤的(tracked):已經(jīng)在版本庫(kù)中,或者已經(jīng)使用git add命令添加至索引中的文件间涵;
  • 被忽略的(Igored):在版本庫(kù)中通過(guò)“忽略文件列表”明確聲明為被忽略的文件仁热;
  • 未追蹤的(untracked):上述兩類(lèi)之外的其它文件;
(1)勾哩、git ls-files:列出文件抗蠢;

-s:列出暫存區(qū)(stage area)中的文件對(duì)象

(2)、git cat-file:查看文件思劳;

-p:美觀排版顯示文件內(nèi)容迅矛;

(3)、git hash-object:計(jì)算文件的hash碼潜叛;
(4)秽褒、git write-tree:根據(jù)當(dāng)前索引中的內(nèi)容創(chuàng)建樹(shù)對(duì)象;

3钠导、Git暫存區(qū)命令

(1)震嫉、git add:暫存文件森瘪;
(2)牡属、git ls-files:

默認(rèn)顯示索引中的文件列表的原始文件名;
-s:顯示暫存的文件信息:權(quán)限扼睬、對(duì)象名逮栅、暫存號(hào)及原始文件名悴势;
-o:顯示未被追蹤的文件;

示例:
  • 添加目錄到暫存區(qū)中
[root@node-65 testproj]# ls
passwd  README
#把所在目錄措伐,存儲(chǔ)到暫存區(qū)中
[root@node-65 testproj]# git add ./
[root@node-65 testproj]# tree .git
.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── objects
│   ├── 20
│   │   └── 83afb61272a2406ba0705201ba9a956655ad2e
│   ├── e2
│   │   └── ebf1c73ae535813955ab394d92d92a2f1fb330
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags
  • 添加文件到暫存區(qū)中
[root@node-65 testproj]# vim README 

#把文件存儲(chǔ)到暫存中
[root@node-65 testproj]# git add README 
[root@node-65 testproj]# tree .git
.....
├── objects
│   ├── 20
│   │   └── 83afb61272a2406ba0705201ba9a956655ad2e
│   ├── 7f
│   │   └── 40d19f465256c6fedec561945ca5abfc497635
│   ├── e2
│   │   └── ebf1c73ae535813955ab394d92d92a2f1fb330
.......

#查詢(xún)當(dāng)前git狀態(tài)
[root@node-65 testproj]# git status
# On branch master  #當(dāng)前在主分支上
#
# Initial commit         #未提交過(guò)
#
# Changes to be committed: #如果提交特纤,以下文件將會(huì)改變。
#   (use "git rm --cached <file>..." to unstage)#如果不想提交侥加,可以用git rm命令刪除暫存區(qū)的文件
#
#   new file:   README   #新文件夾名稱(chēng)
#   new file:   passwd  #新文件夾名稱(chēng)
(3)git rm 刪除命令

git rm:刪除工作目錄中的文件捧存,及索引中的映射;
git rm --cached:只刪除索引中的映射担败;

示例:
  • 刪除暫存區(qū)中指定文件
#刪除暫存中的文件
[root@node-65 testproj]# git rm passwd --cached
rm 'passwd'

[root@node-65 testproj]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   README
#
# Untracked files:     #此文件還未保存到暫存區(qū)中昔穴,如果保存請(qǐng)使用git add命令
#   (use "git add <file>..." to include in what will be committed)
#
#   passwd

(4)git mv 移動(dòng)命令

git mv:改變工作目錄中的文件名,及索引中的映射提前;

示例:
#重命名
[root@node-65 testproj]# git add README.txt 
[root@node-65 testproj]# git mv README.txt  README
[root@node-65 testproj]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README
#

4吗货、Git提交至版本庫(kù)命令

提交的標(biāo)識(shí):

  • 引用:ID, reference, SHA1, 絕對(duì)提交名狈网;
  • 符號(hào)引用:symbolic reference, symref宙搬;
  • 本地特性分支名稱(chēng)、遠(yuǎn)程跟蹤分支名稱(chēng)拓哺、標(biāo)簽名勇垛;
    名稱(chēng):
    • refs/heads/REF:本地特性分支名稱(chēng)
    • refs/remotes/REF:遠(yuǎn)程跟蹤分支名稱(chēng)
    • refs/tags/REF:標(biāo)簽名
      Git會(huì)自動(dòng)維護(hù)幾個(gè)特定目的的特殊符號(hào)引用:
      HEAD:始終指向當(dāng)前分支的最近提交;或檢出到其它分支時(shí)士鸥,目標(biāo)分支的最近提交窥摄;
      ORIG_HEAD:合并操作時(shí),新生成的提交前面的那一個(gè)提交保存于此引用中础淤;
      FETCHED_HEAD:遠(yuǎn)程分支最近一次提交的上一次提交崭放;
      MERGE_HEAD:合并操作時(shí),其它分支的上一次提交鸽凶;

相對(duì)提交名示例:

^:C6^表示當(dāng)前分支的前一個(gè)版本, C6^2表示第二分支的前一個(gè)版本
~:C6~表示當(dāng)前分支的前一個(gè)版本, C6~2表示當(dāng)前分支的前二個(gè)版本,
提交的相對(duì)引用表示方法

提交的相對(duì)范圍引用表示方法
(1)币砂、git commit :Git提交
(2)、git log:查看提交日志玻侥;
示例:向本地版本庫(kù)提交
[root@node-65 testproj]# git commit
#會(huì)自動(dòng)彈出一個(gè)編輯器决摧,出現(xiàn)以下字段,提示完善信息

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   README
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       passwd
Initial version  #添加
version: 0.1.0  #添加

#提交成功后
[master (root-commit) 07dd1af] Initial version version: 0.1.0
 1 file changed, 2 insertions(+)
 create mode 100644 README

#git目錄中
[root@node-65 ~]# tree /root/.git
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           └── master    
├── objects
│   ├── 07
│   │   └── dd1afa3900a99afb944288f14ddc15c581fa80
│   ├── 20
│   │   └── 83afb61272a2406ba0705201ba9a956655ad2e
│   ├── 7f
│   │   └── 40d19f465256c6fedec561945ca5abfc497635
│   ├── dd
│   │   └── 3ba7c74fc18129c135dcffda303f3e6b5dc454
│   ├── e2
│   │   └── ebf1c73ae535813955ab394d92d92a2f1fb330
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   └── master
    └── tags

#查看提交日志
[root@node-65 testproj]# git log
commit 07dd1afa3900a99afb944288f14ddc15c581fa80
Author: hehe <hehe@hehe.com>
Date:   Tue Dec 4 08:46:47 2018 +0800

    Initial version
    version: 0.1.0

#添加提交標(biāo)簽
[root@node-65 testproj]# git log
commit 07dd1afa3900a99afb944288f14ddc15c581fa80
Author: hehe <hehe@hehe.com>
Date:   Tue Dec 4 08:46:47 2018 +0800

    Initial version
    version: 0.1.0
[root@node-65 testproj]# git tag v0.1 07dd1afa
[root@node-65 testproj]# git tag -l
v0.1

示例:基于teg標(biāo)簽檢出提交到本地目錄
[root@node-65 testproj]# git checkout v0.1
M   README
Note: checking out 'v0.1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 07dd1af... Initial version version: 0.1.0

#提交0.2版本
[root@node-65 testproj]# git commit -m"version 0.2.0"
[detached HEAD fe3c24d] version 0.2.0
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@node-65 testproj]# git log
commit fe3c24dda78882c3be3b0222a6231e0c7f486554
Author: hehe <hehe@hehe.com>
Date:   Tue Dec 4 17:11:40 2018 +0800

    version 0.2.0

commit 07dd1afa3900a99afb944288f14ddc15c581fa80
Author: hehe <hehe@hehe.com>
Date:   Tue Dec 4 08:46:47 2018 +0800

    Initial version
    version: 0.1.0
[root@node-65 testproj]# git tag v0.2 fe3c24d
[root@node-65 testproj]# git tag -l
v0.1
v0.2

5凑兰、git diff:比較提交掌桩、索引及工作目錄;

--color:顏色區(qū)別

#工作目錄與最近提交比較
[root@node-65 testproj]# git diff HEAD 
diff --git a/README b/README
index b736af3..7515de6 100644
--- a/README
+++ b/README
@@ -1,2 +1,3 @@
 this is readme
 1234567890
+0000000000

#工作目錄與暫存區(qū)比較
[root@node-65 testproj]# git diff  --color
diff --git a/README b/README
index b736af3..7515de6 100644
--- a/README
+++ b/README
@@ -1,2 +1,3 @@
 this is readme
 1234567890
+0000000000

#保存到暫存區(qū)姑食,暫存區(qū)文件和最近提交比較
[root@node-65 testproj]# git add README 
[root@node-65 testproj]# git diff --cached
diff --git a/README b/README
index b736af3..7515de6 100644
--- a/README
+++ b/README
@@ -1,2 +1,3 @@
 this is readme
 1234567890
+0000000000

git diff比較提交

6波岛、git reset:撤消此前的操作;

--soft:將HEAD引用指向給定的提交音半,但不影響索引和工作目錄则拷;
--mixed:將HEAD引用指向給定的提交贡蓖,并將索引內(nèi)容改變?yōu)橹付ㄌ峤坏目煺眨坏桓淖児ぷ髂夸洠?br> --hard:將HEAD引用指向給定的提交煌茬、將索引內(nèi)容改變?yōu)橹付ㄌ峤坏目煺粘馄蹋⒏淖児ぷ髂夸浿械膬?nèi)容反映指定提交的內(nèi)容(謹(jǐn)慎使用);

[root@node-65 testproj]# git log
commit 7acab53fe1cb2c436a468ceb652a29c09a34232a
Author: hehe <hehe@hehe.com>
Date:   Tue Dec 4 17:26:53 2018 +0800

    version 0.1.0
..............

#撤銷(xiāo)指向給定的提交
[root@node-65 testproj]# git reset --mixed 7acab53

四坛善、Git分支

1晾蜘、分支命名法則:

  • 可以使用/,但不能以/結(jié)尾眠屎;
  • 不能以-開(kāi)頭笙纤;
  • 以位于/后面的組件,不能以.開(kāi)頭组力;
  • 不能使用連續(xù)的...省容;
  • 不能使用空白字符;
  • 不能使用^, ~, ?, *燎字,[等腥椒;
  • 分支命名必須惟一,分支名字的名字始終指向目標(biāo)分支的最近一次提交候衍;

2笼蛛、分支相關(guān)命令

(1)git branch:列出、創(chuàng)建及刪除分支蛉鹿;

格式: git branch BRANCH_NAME [START_COMMIT]
git branch -d BRANCH_NAME

  • git show-branch:查看分支及其相關(guān)的提交滨砍;
示例:
#查詢(xún)分支
[root@node-65 testproj]# git branch --list
* (detached from v0.1)
  master

#創(chuàng)建develop分支
[root@node-65 testproj]# git branch develop
[root@node-65 testproj]# git branch --list
* (detached from v0.1)
  develop
  master

#切換到develop分支
[root@node-65 testproj]# git checkout develop
Switched to branch 'develop'
[root@node-65 testproj]# git branch --list
* develop     #*代表當(dāng)前分支
  master

(2)git checkout 檢出分支:

格式:git checkout <branch>:

示例:
#檢出文件和分支
[root@node-65 testproj]# git checkout README
[root@node-65 testproj]# ls 
README

#查詢(xún)暫存區(qū)文件
[root@node-65 testproj]# git ls-files -s
100644 7f40d19f465256c6fedec561945ca5abfc497635 0     README

#計(jì)算出項(xiàng)目的哈希值
[root@node-65 testproj]# git hash-object README 
7f40d19f465256c6fedec561945ca5abfc497635

#查看文件內(nèi)容
[root@node-65 testproj]# git cat-file -p 7f40d1
this is readme

(3)分支的合并:
  • 合并基礎(chǔ):要合并的分支的最近一次的共同提交;

  • 要和誰(shuí)合并

    • 我們的版本:當(dāng)前分支的最近一次提交妖异;
    • 他們的版本:要合并進(jìn)來(lái)的分支的最近一次提交惋戏;
#切換到develop分支
[root@node-65 testproj]# git branch --list
* develop
  master
#創(chuàng)建文件
[root@node-65 testproj]# vim group
#保存到暫存
[root@node-65 testproj]# git add group 
#提交到對(duì)象庫(kù)
[root@node-65 testproj]# git commit -m"version 0.1.0"
[develop 7acab53] version 0.1.0
 1 file changed, 1 insertion(+)
 create mode 100644 group

[root@node-65 testproj]# git log
commit 7acab53fe1cb2c436a468ceb652a29c09a34232a
Author: hehe <hehe@hehe.com>
Date:   Tue Dec 4 17:26:53 2018 +0800

    version 0.1.0

#設(shè)定提交標(biāo)簽
[root@node-65 testproj]# git tag v0.3 7acab53
[root@node-65 testproj]# git tag -l
l
v0.1
v0.2
v0.3

#合并提交
#查詢(xún)主分支文件
[root@node-65 testproj]# git checkout master
Switched to branch 'master'
[root@node-65 testproj]# ls
README
#查詢(xún)develop支文件
[root@node-65 testproj]# git checkout develop
Switched to branch 'develop'
[root@node-65 testproj]# ls
group  README

#將develop分支合并到master分支上
[root@node-65 testproj]# git merge develop
Updating 07dd1af..7acab53
Fast-forward
 README | 2 +-
 group  | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 group

(4)無(wú)沖突合并:
示例:
$ git checkout master
$ git status
$ git merge BRANCH_NAME
$  git log --graph --pretty=oneline --abbrev-commit
(5)有沖突合并:

解決步驟:手動(dòng)解決沖突-->解決完成之后-->git add保存到暫存空間-->git commit提交到版本庫(kù)

示例:
#切換到開(kāi)發(fā)分支
[root@node-65 testproj]# git checkout develop
#修改文件
[root@node-65 testproj]# vim README 
#保存到暫存區(qū)
[root@node-65 testproj]# git add README 
#提交文件到版本庫(kù)
[root@node-65 testproj]# git commit -m "version 0.2.1"
[develop d8dc96c] version 0.2.1
 1 file changed, 1 insertion(+)
#切換回master分支
[root@node-65 testproj]# git checkout master
Switched to branch 'master'
#合并開(kāi)發(fā)分支
[root@node-65 testproj]# git merge develop
Auto-merging README
CONFLICT (content): Merge conflict in README #未能合并文件
Automatic merge failed; fix conflicts and then commit the result.#自動(dòng)合并失敗;解決沖突,然后提交結(jié)果。

#手動(dòng)對(duì)比
[root@node-65 testproj]# git diff
diff --cc README
index 7515de6,63466c3..0000000
--- a/README
+++ b/README
@@@ -1,3 -1,3 +1,7 @@@
  this is readme
  1234567890
++<<<<<<< HEAD
 +0000000000
++=======
+ 1111111111
++>>>>>>> develop
#手動(dòng)修改沖突文件
[root@node-65 testproj]# vim README 
this is readme
1234567890
<<<<<<< HEAD
0000000000
=======
1111111111
>>>>>>> develop

(6)合并的變基操作:

命令格式:git rebase

$ git checkout dev
$ git rebase master
$ git checkout master
$ git merge -m "MSG"
合并的變基操作

五他膳、Git:分布式版本控制系統(tǒng)

Git分布式版本控制系統(tǒng)基于網(wǎng)絡(luò)協(xié)議:http, https, ssh, git來(lái)實(shí)現(xiàn)


多客戶(hù)端遠(yuǎn)程庫(kù)協(xié)作流程

1响逢、Git服務(wù)使用的協(xié)議

協(xié)議:本地協(xié)議(local)、HTTP/HTTPS協(xié)議棕孙、SSH協(xié)議舔亭、Git協(xié)議;
  • (1)蟀俊、 本地協(xié)議:

URL格式
例如:/path/to/repo.git
file:///path/to/repo.git

  • (2)钦铺、Git協(xié)議
    由git-daemon程序提供,監(jiān)聽(tīng)在tcp的9418端口肢预;僅支持“讀”操作矛洞,無(wú)任何認(rèn)證功能;

URL格式:
例如:git://host/path/to/repo.git
git://host/~user/path/to/repo.git

  • (3)误甚、SSH協(xié)議

樣式一:URL
ssh://[USER@]host[:port]/path/to/repo.git
ssh://[USER@]host[:port]/~USERNAME/path/to/repo.git

樣式二:URL2
[USER@]hostpath/to/repo.git

  • (4)缚甩、HTTP/HTTPS協(xié)議
    http協(xié)議特點(diǎn)是支持讀/寫(xiě)/認(rèn)證

第一種:1.6.5-:?jiǎn)ttp協(xié)議
第二種:1.6.6+:智能http協(xié)議谱净,普遍使用
URL格式
http://host/path/to/repo.git

2窑邦、引用遠(yuǎn)程版本庫(kù)

本地創(chuàng)建與GitHub關(guān)聯(lián)的版本庫(kù)擅威,用于提交和推送版本。
  • 遠(yuǎn)程版本庫(kù):定義在配置文件中一個(gè)實(shí)體冈钦;
    [remote "NAME"]

  • 由兩部分組成:

    • 第一部分:URL郊丛;
    • 第二部分:refspec, 定義一個(gè)版本庫(kù)與其它版本庫(kù)的名稱(chēng)空間的映射關(guān)系;
  • 語(yǔ)法格式:

+source:destination
refs/heads/NAME:本地分支
refs/remotes/NAME:遠(yuǎn)程跟蹤分支

[remote "publish"]
url = http://HOST/pub/repo_name.git
push = +refs/heads/*:refs/remotes/origin/*

remote.publish.url
remote.publish.push

3瞧筛、引用遠(yuǎn)程庫(kù)相關(guān)命令

  • git clone:克隆操作

  • git remote命令:管理遠(yuǎn)程倉(cāng)庫(kù)厉熟;

  • git fetch:取回遠(yuǎn)程服務(wù)器的更新;

  • git pull:取回遠(yuǎn)程服務(wù)器更新较幌,而后與本地的指定分支合并揍瑟;

格式:git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>

  • git push:將本地的更新推送到遠(yuǎn)程主機(jī);

格式:git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>

示例:
#創(chuàng)建本地庫(kù)庫(kù)
[root@node-65 ~]# git init --bare myproject.git
Initialized empty Git repository in /root/myproject.git/
[root@node-65 ~]# ls
anaconda-ks.cfg  myproject.git  testproj
[root@node-65 ~]# tree myproject.git/
myproject.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

#把遠(yuǎn)程倉(cāng)庫(kù)和本地倉(cāng)庫(kù)建立關(guān)聯(lián)關(guān)系
[root@node-65 ~]# git remote add myproject https://githup.com/hehe/myproject.git

#下載遠(yuǎn)程庫(kù)內(nèi)容并合并
[root@node-65 ~]#git pull myproject master
version 0.4.1 merged remote myproject

#上傳本地倉(cāng)庫(kù)內(nèi)容到遠(yuǎn)程倉(cāng)庫(kù)
[root@node-65 ~]# git push myproject master 
輸入用戶(hù)名
輸入密碼

#當(dāng)本地倉(cāng)庫(kù)丟失時(shí)乍炉,可使用clone命令從遠(yuǎn)程服務(wù)器下載
[root@node-65 ~]# git clone https://github.com/xxxx/myproject.git

4绢片、遠(yuǎn)程庫(kù)的ssh訪問(wèn)方法

[root@node-65 .ssh]# ssh-keygen -t rsa -b 4096
[root@node-65 ~]# cd .ssh/
[root@node-65 .ssh]# cat id_rsa.pub
.....<秘鑰>.....
然后,復(fù)制<秘鑰>到github上生成ssh
#使用clone命令ssh方式從遠(yuǎn)程服務(wù)器下載
[root@node-65 ~]# git clone git@github.com:xxxx/myproject.git

#ssh方式上傳本地倉(cāng)庫(kù)內(nèi)容到遠(yuǎn)程倉(cāng)庫(kù)
[root@node-65 ~]# git push origin master 

5岛琼、git的http服務(wù)器:

倉(cāng)庫(kù)默認(rèn)所在目錄:
/var/www/git

示例:創(chuàng)建git的http服務(wù)器
root@node-65 ~]# yum install httpd -y
[root@node-65 ~]# yum install gitweb -y

[root@node-65 ~]# cd /var/www/git/

#建立并初始化puppetmodules庫(kù)
[root@node-65 git]# git init --bare puppetmodules.git

#修改屬主屬組
[root@node-65 git]# chown -R apache.apache puppetmodules.git/

Initialized empty Git repository in /var/www/git/puppetmodules.git/
[root@node-65 git]# ls
gitweb.cgi  puppetmodules.git  static
[root@node-65 git]# cd /etc/httpd/conf.d
[root@node-65 conf.d]# mv git.conf git.conf.bak

#創(chuàng)建一個(gè)http虛擬機(jī)
[root@node-65 conf.d]# vim gitrepo.conf
<VirtualHost *:80>
      ServerName node-65
      SetEnv GIT_PROJECT_ROOT /var/www/git
      SetEnv GIT_HTTP_EXPORT_ALL
      ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
      <Directory "/usr/libexec/git-core/">
            Options ExecCGI Indexes
            Require all granted
      </Directory>
      <location /git>
            AuthType Basic
            AuthName "Private Git Repo"
            AuthUserFile /etc/httpd/conf.d/.gitpasswd
             Require valid-user
       </location>

 Alias /git/repo  /var/www/git

<Directory /var/www/git>
  Options +ExecCGI
  AddHandler cgi-script .cgi
  DirectoryIndex gitweb.cgi
</Directory>

</VirtualHost>


#新建立兩git用戶(hù)
[root@node-65 conf.d]# htpasswd -c -m ./.gitpasswd tom
New password: 
Re-type new password: 
Adding password for user tom
[root@node-65 conf.d]# htpasswd -c -m ./.gitpasswd jerry
New password: 
Re-type new password: 
Adding password for user jerry

[root@node-65 ~]# systemctl start httpd.service

客戶(hù)機(jī)端

[root@node-64 ~]# yum install git -y

#克隆自建遠(yuǎn)程庫(kù)
[root@node-64 ~]# git clone http://192.168.1.65/git/puppetmodules.git

[root@node-64 ~]# cd puppetmodules/
#建立puppet目錄
[root@node-64 puppetmodules]# mkdir nginx/{files,manifests,templates,lib,spec,tests} -pv


[root@node-64 puppetmodules]# vim nginx/manifests/init.pp
class nginx {
         package{'nginx':
             ensure => latest,
          }
         service {'nginx':
               ensure => running,
               enable => true,
           }
}

#添加到暫存區(qū)
[root@node-64 puppetmodules]# git add .



[root@node-64 puppetmodules]# git config --global user.name tom
[root@node-64 puppetmodules]# git config --global user.email tom@hehe.com

##提交
[root@node-64 puppetmodules]# git commit -m "nginx module ok"
[master (root-commit) fe12d61] nginx module ok
 1 file changed, 9 insertions(+)
 create mode 100644 nginx/manifests/init.pp

[root@node-64 puppetmodules]# git commit -m "nginx module ok"

#推送到主機(jī)
[root@node-64 puppetmodules]# git push origin master

六底循、自建Git倉(cāng)庫(kù)--開(kāi)源項(xiàng)目GitLab

  • 如果想自己建立一個(gè)Git倉(cāng)庫(kù),可以用使用開(kāi)源項(xiàng)目GitLab槐瑞,是由烏克蘭程序員DmitriyZaporozhets和ValerySizov開(kāi)發(fā)熙涤,它由Ruby寫(xiě)成。后來(lái)困檩,一些部分用Go語(yǔ)言重寫(xiě)祠挫。
  • GitLab 是一個(gè)用于倉(cāng)庫(kù)管理系統(tǒng)的開(kāi)源項(xiàng)目,使用Git作為代碼管理工具悼沿,并在此基礎(chǔ)上搭建起來(lái)的web服務(wù)茸歧,
  • GitLab 安裝十分便捷,簡(jiǎn)單易用显沈,官方提供安裝包可自動(dòng)完成安裝設(shè)置软瞎。

官方網(wǎng)站:https://about.gitlab.com/
安裝文件下載地址:https://packages.gitlab.com/gitlab

#下載GitLab
[root@node-65 ~]# wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm/download.rpm

#安裝GitLab
[root@node-65 ~]# yum install gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm -y

#執(zhí)行自動(dòng)配置腳本
[root@node-65 ~]# gitlab-ctl reconfigure
........
Running handlers:
Running handlers complete

#啟動(dòng)
[root@node-65 bin]#  cd /opt/gitlab/bin
[root@node-65 bin]#  gitlab-ctl start
ok: run: gitaly: (pid 6907) 92s
ok: run: gitlab-monitor: (pid 6942) 90s
ok: run: gitlab-workhorse: (pid 6922) 91s
ok: run: logrotate: (pid 6645) 178s
ok: run: nginx: (pid 6628) 184s
ok: run: node-exporter: (pid 6683) 171s
ok: run: postgres-exporter: (pid 6998) 89s
ok: run: postgresql: (pid 6381) 250s
ok: run: prometheus: (pid 6986) 89s
ok: run: redis: (pid 6321) 256s
ok: run: redis-exporter: (pid 6712) 159s
ok: run: sidekiq: (pid 6538) 198s
ok: run: unicorn: (pid 6500) 204s

輸入自定義密碼

注冊(cè)用戶(hù)

登錄成功你可以創(chuàng)建組和項(xiàng)目

七、Gitlab中文補(bǔ)丁

~]# tar xf gitlab-12-3-stable-zh.tar.gz    #解壓下載的中文補(bǔ)丁
~]# cat gitlab-12-3-stable-zh/VERSION   #查詢(xún)對(duì)應(yīng)的版本
12.3.5
 ~]#  yum install gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm -y    #安裝下載好的gitlab
~]#  gitlab-ctl reconfigure   #執(zhí)行g(shù)itlab自動(dòng)配置
~]#  cp -r /opt/gitlab/embedded/service/gitlab-rails{,.bak}  #備份要替換的文件
~]#  /bin/cp -rf gitlab-12-3-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/   #替換英文文件
~]#  gitlab-ctl start  #啟動(dòng)gitlab

這里中文改地方不多拉讯,其他地方還是英文
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涤浇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子魔慷,更是在濱河造成了極大的恐慌只锭,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件院尔,死亡現(xiàn)場(chǎng)離奇詭異蜻展,居然都是意外死亡喉誊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)纵顾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)伍茄,“玉大人,你說(shuō)我怎么就攤上這事施逾》蠼茫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵汉额,是天一觀的道長(zhǎng)曹仗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蠕搜,這世上最難降的妖魔是什么怎茫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮妓灌,結(jié)果婚禮上轨蛤,老公的妹妹穿的比我還像新娘。我一直安慰自己旬渠,他們只是感情好俱萍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著告丢,像睡著了一般枪蘑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岖免,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天岳颇,我揣著相機(jī)與錄音,去河邊找鬼颅湘。 笑死话侧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闯参。 我是一名探鬼主播瞻鹏,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鹿寨!你這毒婦竟也來(lái)了新博?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脚草,失蹤者是張志新(化名)和其女友劉穎赫悄,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡埂淮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年姑隅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倔撞。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讲仰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出误窖,到底是詐尸還是另有隱情叮盘,我是刑警寧澤秩贰,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布霹俺,位于F島的核電站,受9級(jí)特大地震影響毒费,放射性物質(zhì)發(fā)生泄漏丙唧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一觅玻、第九天 我趴在偏房一處隱蔽的房頂上張望想际。 院中可真熱鬧,春花似錦溪厘、人聲如沸胡本。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)侧甫。三九已至,卻和暖如春蹋宦,著一層夾襖步出監(jiān)牢的瞬間披粟,已是汗流浹背纵苛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工窖杀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人夷野。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓蒿辙,卻偏偏與公主長(zhǎng)得像拇泛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子思灌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶(hù)端并不是只提取最新版本的文件快照俺叭,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)。這樣一來(lái)习瑰,任何一處協(xié)同...
    __silhouette閱讀 15,855評(píng)論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶(hù)端并不是只提取最新版本的文件快照绪颖,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)...
    sunnyghx閱讀 3,904評(píng)論 0 11
  • Git常用語(yǔ)法 [TOC] Git簡(jiǎn)介 描述 ? Git(讀音為/g?t/。)是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,497評(píng)論 0 13
  • 1.第一次克隆git倉(cāng)庫(kù)的時(shí)候報(bào)錯(cuò): 解決方案: 2.eureka的紅色報(bào)警: 之前了解過(guò)這個(gè)問(wèn)題柠横,當(dāng)時(shí)記得不是什...
    大廠offer閱讀 900評(píng)論 1 1
  • 亂翻書(shū):讀《紙上的故宮》 王羲之的《蘭亭序》窃款,是喜極而泣,悲從中來(lái)牍氛,在風(fēng)花雪月的背后晨继,看到了生命的虛無(wú)和荒涼;李...
    隴上雨人閱讀 957評(píng)論 0 0