【devops】devops-git之介绍以及日常使用

 本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》从问题中去学习k8s

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

《DBA》db的介绍使用(mysql、redis、mongodb...)

Git安装及基础命令使用

一、版本控制系统

1.什么是版本控制系统

记录一个或多个变化的过程,以便随时会到某个时间点
#功能:
1.记录文件的历史变化
2.可以随时回到任何一个时间点
3.多人协作开发

2.为什么要用版本控制系统

版本控制是指在软件开发过程中对各种程序代码、配置文件及说明文档等文件变更的管理,版本控制系统能够随着时间的推进记录一系列文件的变化,方便以后随时回退到某个版本

3.版本并发控制类型

1)本地版本控制系统
平时开发不使用版本控制系统的情况下,我们习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这种方式需要对项目频繁进行复制,最终整个工作区会比较臃肿混乱且时间一长很难区分项目之间的差异。

为了解决这个问题,人们开发了本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。最流行的是RCS,它的工作原理是在硬盘上保存补丁集(补丁指文件修订前后的变化),通过应用所有的补丁,可以重新计算出各个版本的文件内容。

本地版本控制系统一定程度上解决了手动复制粘贴代码的问题,但无法解决多人协作的问题。

img

2)集中式版本控制系统
集中式版本控制系统的出现是为了解决不同系统上的开发者协同开发,即多人协作的问题,主要有 CVS 和 SVN。集中式版本控制系统有一个单一的集中管理的中央服务器,保存所有文件的修订版本,由管理员管理和控制开发人员的权限,而协同工作的人们通过客户端连到中央服务器,从服务器上拉取最新的代码,在本地开发,开发完成再提交到中央服务器。

img

#集中式版本控制系统有许多优点:
1.操作比较简单,只需要拉取代码,开发,提交代码。
2.基本解决多人协作问题,每个人都可以从服务器拉取最新代码了解伙伴的进度。
3.同时管理员可以轻松控制各开发者的权限。
3.只需要维护中央服务器上的数据库即可。

#缺点也很明显:
1.本地没有全套代码,没有版本信息,提交更新都需联网跟服务器进行交互,对网络要求较高。
2.集中式的通病:风险较大,服务器一旦宕机,所有人无法工作,服务器磁盘一旦损坏,如果没有备份将丢失所有数据。
3)分布式版本控制系统
分布式版本控制系统很好地解决了集中式版本控制系统的缺点。首先,在分布式版本控制系统中,系统保存的不是文件变化的差量,而是文件的快照,即把文件的整体复制下来保存,其次,最重要的是分布式版本控制系统是去中心化的,当你从中央服务器拉取下来代码时,拉取的是一个完整的版本库,不仅仅是一份生硬的代码,还有历史记录,提交记录等版本信息,这样即使某一台机器宕机也能找到文件的完整备份。

Git 是 Linux 发明者 Linus 开发的一款分布式版本控制系统,是目前最为流行和软件开发者必须掌握的工具。

img

二、安装git

1.环境准备

主机IP配置
git10.0.0.803G内存

2.基本优化

#关闭selinux和防火墙
#时间同步
[root@git ~]# ntpdate time1.aliyun.com

3.安装git

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

[root@git ~]# git config
--global	use global config file			#使用全局的配置文件
--system	use system config file			#使用系统的配置文件
--local		use repository config file		#使用版本库的配置文件

4.创建git的用户

#配置用户
[root@git ~]# git config --global user.name "lhd"
#配置用户邮箱
[root@git ~]# git config --global user.email "1240206455@qq.com"
#显示语法高亮
[root@git ~]# git config --global color.ui true

#查看全局配置
[root@git ~]# git config --list
user.name=lhd
user.email=1240206455@qq.com
color.ui=true
#生成了一个文件
[root@git ~]# cat .gitconfig
[user]
	name = lhd
	email = 1240206455@qq.com
[color]
	ui = true

5.初始化git

#初始化需要工作目录
[root@git ~]# mkdir git_data

#初始化
[root@git ~]# cd git_data/
[root@git git_data]# git init .
Initialized empty Git repository in /root/git_data/.git/

#初始化会生成多个文件
[root@git git_data]# ll .git/
total 12
drwxr-xr-x 2 root root   6 Sep 17 16:13 branches			#分支目录
-rw-r--r-- 1 root root  92 Sep 17 16:13 config				#配置文件
-rw-r--r-- 1 root root  73 Sep 17 16:13 description			#程序使用的文件
-rw-r--r-- 1 root root  23 Sep 17 16:13 HEAD				#版本指针
drwxr-xr-x 2 root root 242 Sep 17 16:13 hooks				#钩子文件
drwxr-xr-x 2 root root  21 Sep 17 16:13 info				#排除文件
drwxr-xr-x 4 root root  30 Sep 17 16:13 objects				#存放数据的子文件
drwxr-xr-x 4 root root  31 Sep 17 16:13 refs				#数据指针

三、git介绍

1.git组成

1.工作区 (workspace)
	就是我们当前工作空间,也就是我们当前能在本地文件夹下面看到的文件结构。初始化工作空间或者工作空间 clean 的时候,文件内容和 index 暂存区是一致的,随着修改,工作区文件在没有 add 到暂存区时候,工作区将和暂存区是不一致的。

2.暂存区 (index)
	老版本概念也叫 Cache 区,就是文件暂时存放的地方,所有暂时存放在暂存区中的文件将随着一个 commit 一起提交到 local repository 此时 local repository 里面文件将完全被暂存区所取代。暂存区是 git 架构设计中非常重要和难理解的一部分。

3.本地仓库 (local repository)
	git 是分布式版本控制系统,和其他版本控制系统不同的是他可以完全去中心化工作,你可以不用和中央服务器 (remote server) 进行通信,在本地即可进行全部离线操作,包括 log,history,commit,diff 等等。完成离线操作最核心是因为 git 有一个几乎和远程一样的本地仓库,所有本地离线操作都可以在本地完成,等需要的时候再和远程服务进行交互。

4.远程仓库 (remote repository)
	中心化仓库,所有人共享,本地仓库会需要和远程仓库进行交互,也就能将其他所有人内容更新到本地仓库把自己内容上传分享给其他人。结构大体和本地仓库一样。

img

2.git的四种状态

#文件在不同的操作下可能处于不同的 git 生命周期

1.Untracked		#未跟踪
	1)新建的文件,还没有被git管理过
	2)将文件从git跟踪管理中删除,那么readme处于unstacked状态
	
2.Staged		#已暂存
	1)文件已经使用git add提交到暂存区
	2)然后在对modifed状态的文件执行git add命令,那么readme文件又变成staged状态

3.Unmodified	#未修改
	1)将处于staged状态的文件git commit到仓库,那么文件处于unmodified状态

4.Modified		#已修改
	1)如果当前文件正处于unmodified状态,然后修改工作区的文件,那么文件变为modifed状态

img

四、git基础命令

1.查看状态

[root@git git_data]# git status
# On branch master				# 暂存区数据
#
# Initial commit				# 未跟踪			
#
nothing to commit (create/ files and use "git add" to track)

2.文件操作

1)新建文件
[root@git git_data]# touch {1,2,3}
[root@git git_data]# ll
total 0
-rw-r--r-- 1 root root 0 Sep 17 16:38 1
-rw-r--r-- 1 root root 0 Sep 17 16:38 2
-rw-r--r-- 1 root root 0 Sep 17 16:38 3
2)提交文件
#提交文件到暂存区
[root@git git_data]# git add 1
[root@git git_data]# git status

#提交所有工作区域的文件
[root@git git_data]# git add .
[root@git git_data]# git status

#提交暂存区文件到本地仓库
git commit -m "提交注释"
3)删除文件
1>将暂存区的文件移除
[root@git git_data]# git rm --cache 1
rm '1'
[root@git git_data]# git status
2>删除工作目录的文件
[root@git git_data]# rm -rf 1
[root@git git_data]# git status
3>同时删除
#同时删除暂存区和工作区的文件
[root@git git_data]# git rm -f 2
rm '2'
[root@git git_data]# git status	
4)提交到仓库
#将暂存区的文件提交到仓库
[root@git git_data]# git commit -m "add new file 3"
[master (root-commit) a4566ae] add new file 3
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 3
 
 -m		#注释

#查看状态,没有可提交的内容
[root@git git_data]# git status
# On branch master
nothing to commit, working directory clean
5)修改文件
1>重命名
#方式一:
1.本地重命名
[root@git git_data]# mv 3 3.txt
[root@git git_data]# git status

2.从暂存区删除文件
[root@git git_data]# git rm --cached 3
rm '3'

3.再次提交文件
[root@git git_data]# git add 3.txt
[root@git git_data]# git status

4.提交到本地仓库
[root@git git_data]# git commit -m "rename 3.txt"
2>同时修改
1.同时修改暂存区和工作目录的文件名字
[root@git git_data]# git mv 3.txt 3
[root@git git_data]# git status

2.提交本地仓库
[root@git git_data]# git commit -m "rename 3 too"
6)对比文件
git status 只能查看区域的状态的不同,不能查看内容是否相同

git diff	#可以查看文件的不同

# 对比工作目录和暂存区的文件
[root@git git_data]# git diff 3
diff --git a/3 b/3
index 573541a..58c9bdf 100644
--- a/3
+++ b/3
@@ -1 +1 @@
-0
+111


# 对比本地仓库和暂存区的数据
[root@git git_data]# git diff --cached 3
diff --git a/3 b/3
index 573541a..58c9bdf 100644
--- a/3
+++ b/3
@@ -1 +1 @@
-0
+111

3.提交历史

当我们执行git commit后,发现代码错了,需要回滚
git任何操作都相当于做快照,我们可以恢复到任意时刻
1)查看历史
[root@git git_data]# git log 
commit 43f49f38976593194516ab68228faaa09b746270
Author: lhd <1240206455@qq.com>
Date:   Thu Sep 17 17:09:21 2020 +0800

    modified 3

commit 90f573fa6524704cc3457cd3e3a1ccb24e5230ef
Author: lhd <1240206455@qq.com>
Date:   Thu Sep 17 16:58:06 2020 +0800

    rename 3 too
2)查看简单的历史提交
[root@git git_data]# git log --oneline 
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
3)查看当前分支
[root@git git_data]# git log --oneline --decorate
43f49f3 (HEAD, master) modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
4)查看提交的详细信息
[root@git git_data]# git log -p
5)显示最近提交的数据
[root@git git_data]# git log --oneline  -2			# 只显示两行
43f49f3 modified 3
90f573f rename 3 too
6)恢复了历史数据
1>暂存区数据取出至工作区
#从暂存区将数据取出
[root@git git_data]# git checkout -- 3
2>修改了工作区并且提交到了暂存区
# 回到上一次提交的节点(也就是本地仓库退回暂存区)
[root@git git_data]# git reset HEAD 3
Unstaged changes after reset:
M	3

#从暂存区将数据取出(将暂存区数据取出至工作区)
[root@git git_data]# git checkout -- 3
[root@git git_data]# git diff 3
3>修改了工作区并且提交到了暂存区在提交到了本地仓库
1.修改文件并一路提交到本地仓库
[root@git git_data]# echo 333 > 3
[root@git git_data]# git add 3
[root@git git_data]# git commit -m "错误的提交"
[master 3044a5a] 错误的提交
 1 file changed, 1 insertion(+), 1 deletion(-)
 
2.发现错误,想要回滚
#查看提交历史
[root@git git_data]# git log --oneline 
3044a5a 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
​
3.使用指针回到上一次提交的时间点
[root@git git_data]# git reset --hard 43f49f3
HEAD is now at 43f49f3 modified 3
[root@git git_data]# git log --oneline --decorate
43f49f3 (HEAD, master) modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
​
4.发现回滚错了,又看不到新提交的时间点
#查看所有的经历时间节点
[root@git git_data]# git reflog 
43f49f3 HEAD@{0}: reset: moving to 43f49f3
3044a5a HEAD@{1}: commit: 错误的提交
43f49f3 HEAD@{2}: commit: modified 3
90f573f HEAD@{3}: commit: rename 3 too
5d61056 HEAD@{4}: commit: rename 3.txt
a4566ae HEAD@{5}: commit (initial): add new file 3
​
5.回到回滚之前的时间点
[root@git git_data]# git reset --hard 3044a5a
HEAD is now at 3044a5a 错误的提交
[root@git git_data]# cat 3 
333

 

<think>我们面对的问题是:用户尝试添加一个名为 "builder" 的远程仓库,但系统提示该远程仓库已经存在(error: remote builder already exists)。用户之前可能已经移除了名为 "origin" 的远程仓库,但现在遇到的是 "builder" 已经存在。 根据Git的机制,每个远程仓库在本地都有一个唯一的名称。如果我们尝试添加一个已经存在的远程名称,就会得到这个错误。 解决方案步骤: 1. **检查现有的远程仓库**:使用 `git remote -v` 命令查看当前配置的远程仓库列表,确认是否已经存在名为 "builder" 的远程仓库。 2. **如果确实存在,我们可以选择**: a. **删除现有的 "builder" 远程仓库**:如果这个远程仓库已经不再需要,或者我们想用新的URL替换它,我们可以先删除它,然后再添加。 b. **修改现有 "builder" 远程仓库的URL**:如果我们只是想更新这个远程仓库的URL,可以使用 `git remote set-url` 命令。 3. **重新添加或更新**: - 如果选择删除,则执行 `git remote remove builder` 删除,然后再执行 `git remote add builder <URL>` 添加新的。 - 如果选择更新URL,则直接执行 `git remote set-url builder <新的URL>`。 4. **验证**:再次使用 `git remote -v` 确保配置正确。 根据用户描述,他们之前已经移除了origin,但现在是builder已经存在。所以我们需要针对builder进行操作。 具体步骤: 步骤1:查看当前远程仓库配置 ```bash git remote -v ``` 步骤2:如果存在名为builder的远程仓库,并且我们确定要替换它,那么先删除: ```bash git remote remove builder ``` 步骤3:然后重新添加: ```bash git remote add builder git@codehub-devops.zhydc-nyyjy-1.r410.cnooc:hyyykfypt00001/cnooc-eadcloud-builder.git ``` 或者,如果我们只是想更新这个远程仓库的URL(比如URL有变化),那么不需要删除,直接更新: ```bash git remote set-url builder git@codehub-devops.zhydc-nyyjy-1.r410.cnooc:hyyykfypt00001/cnooc-eadcloud-builder.git ``` 步骤4:再次验证: ```bash git remote -v ``` 这样就应该能解决问题。 注意:如果用户之前已经添加过builder,并且现在想更换URL,那么使用set-url是更简便的方法,因为它可以保留已经配置的fetch和push的URL(如果分开配置的话)。但在这个场景中,用户似乎只是想添加一个新的远程仓库,而之前已经存在同名的,所以删除后重新添加是直接的方法。 另外,如果用户不确定是否还需要原来的builder,可以先用`git remote -v`查看一下原来的builder指向的URL是什么,再决定是否删除。 根据引用[1]中提到的git status,用户可能是在一个已有的项目中进行操作,所以确保不要误删重要的远程仓库。 因此,我们给出如下回答:</think>### 解决 `error: remote builder already exists` 问题 当 Git 提示远程仓库 "builder" 已存在时,可按以下步骤处理: --- #### 步骤 1:确认现有远程仓库 ```bash git remote -v ``` 检查输出是否包含名为 `builder` 的远程配置(类似引用[1]中的 `git status` 检查方式)[^1]。 --- #### 步骤 2:删除已存在的远程仓库 ```bash git remote remove builder ``` 或旧版 Git 使用: ```bash git remote rm builder ``` > ✅ 此操作仅删除本地配置,不影响远程仓库(类似引用[2]中 Docker 处理 Git repo 的方式)[^2]。 --- #### 步骤 3:手动编辑配置文件(如命令失败) 1. 打开项目目录的 `.git/config` 文件 2. 删除包含 `[remote "builder"]` 的整个配置节: ```ini [remote "builder"] url = git@codehub-devops... # 删除这个区块 fetch = +refs/heads/*:refs/remotes/builder/* ``` --- #### 步骤 4:重新添加远程仓库 ```bash git remote add builder git@codehub-devops.zhydc-nyyjy-1.r410.cnooc:hyyykfypt00001/cnooc-eadcloud-builder.git ``` --- #### 步骤 5:验证配置 ```bash git remote -v # 应显示类似内容: # builder git@codehub-devops... (fetch) # builder git@codehub-devops... (push) ``` --- ### 备选方案:直接更新 URL 若需保留远程名称但更新地址: ```bash git remote set-url builder git@new-url-path.git # 替换为新URL ``` --- ### 关键注意事项 1. **URL 格式验证**: - 确保地址格式正确:`git@host:path/repo.git` - 避免使用 HTTPS 和 SSH 混合格式(类似引用[4]中 builder 的配置原则)[^4] 2. **权限问题**: -使用 SSH,确认 `~/.ssh/id_rsa.pub` 已添加到代码平台 - 测试连接:`ssh -T git@codehub-devops...` 3. **缓存问题**: - 如遇异常,尝试 `git remote prune builder` 清理无效引用 > 通过以上步骤可解决 99% 的远程仓库名称冲突问题(类似引用[3]中 Docker 处理镜像的逻辑)[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值