一、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)
4劣光、Git的工作區(qū)
- 工作區(qū):Working Directory工作目錄
- 暫存區(qū):Staging Area 索引
-
版本庫(kù):Repository 將暫存區(qū)文件提交到版本庫(kù)中
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);
2糊饱、樹(shù)(tree)對(duì)象:一個(gè)目錄代表一層目錄信息垂寥;
3、提交(commit)對(duì)象:用于保存版本庫(kù)一次變化的元數(shù)據(jù)另锋,包括作者滞项、郵箱、提交日期夭坪、日志文判;每個(gè)提交對(duì)象都指定一個(gè)目錄樹(shù)對(duì)象;
4室梅、標(biāo)簽(tag)對(duì)象:用于給一個(gè)特定對(duì)象一個(gè)易讀的名稱(chēng)戏仓;
三、安裝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è)版本,
(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
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)
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
七、Gitlab中文補(bǔ)丁
- Gitlab中文補(bǔ)丁下載地址https://gitlab.com/xhang/gitlab
~]# 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