在Ubuntu服务器搭建Git仓库,以及Git使用基本流程

本文介绍了如何在Ubuntu服务器搭建简易的Git仓库,适用于小型团队的代码寄存,管理以及版本控制,介绍了在vscode中使用集成Git工具以及Git Graph插件。
在这里插入图片描述

一、在Ubuntu服务器中创建新用户,专用于搭建Git仓库

  • 登录任何能连接上局域网的Ubuntu服务器,最好是24小时开机运行,比如我的服务器ip为192.168.5.5
(base) PS C:\Users\29116\Desktop> ssh jetson@192.168.5.5
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.9.337-tegra aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.

Expanded Security Maintenance for Infrastructure is not enabled.

1 update can be applied immediately.
1 of these updates is a standard security update.
To see these additional updates run: apt list --upgradable

176 additional security updates can be applied with ESM Infra.
Learn more about enabling ESM Infra service for Ubuntu 18.04 at
https://ubuntu.com/18-04

Last login: Sat May 11 15:08:30 2024 from 192.168.5.20
jetson@jetson-desktop:~$
  • 添加新的用户,sudo adduser git,输入用户密码,再次输入,然后一直回车
jetson@jetson-desktop:~$ sudo adduser git
Adding user `git' ...
Adding new group `git' (1001) ...
Adding new user `git' (1001) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for git
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]
Adding new user `git' to extra groups ...
Adding user `git' to group `audio' ...
Adding user `git' to group `gdm' ...
Adding user `git' to group `gpio' ...
Adding user `git' to group `i2c' ...
Adding user `git' to group `lightdm' ...
Adding user `git' to group `video' ...
Adding user `git' to group `weston-launch' ...
  • 添加用户到sudo组sudo adduser git sudo,否则使用不了sudo命令
jetson@jetson-desktop:~$ sudo adduser git sudo
Adding user `git' to group `sudo' ...
Adding user git to group sudo
Done.
  • 检查是否添加成功,home目录新增git即为成功
jetson@jetson-desktop:~$ ls /home
git  jetson
  • 安装gitopenssh-serveropenssh-client
sudo apt update
sudo apt install git openssh-server openssh-client
  • 验证
git --version
sudo systemctl status ssh 
sudo systemctl enable ssh
  • 以git账户远程登陆服务器
ssh git@192.168.5.5
  • 创建ssh密钥对
cd ~
ssh-keygen -t rsa 		# 之后一直回车

在这里插入图片描述

  • 在客户端也按同样的指令生成密钥对
cd ~
ssh-keygen -t rsa
cd .ssh
cat id_rsa.pub		# 复制这个公钥,之后要用到
  • 将客户端公钥复制到服务器~/.ssh/authorized_keys里面
git@jetson-desktop:~$ cd .ssh
git@jetson-desktop:~/.ssh$ ls
id_rsa  id_rsa.pub
git@jetson-desktop:~/.ssh$ touch authorized_keys
git@jetson-desktop:~/.ssh$ chmod 600 authorized_keys
git@jetson-desktop:~/.ssh$ echo > "替换为客户端的公钥" authorized_keys 
git@jetson-desktop:~/.ssh$ sudo vim /etc/ssh/sshd_config

#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 的 #号都去掉,Esc,:+wq保存

  • 在合适的位置创建仓库,只要有个目录就行,记住路径,之后客户端克隆要用
cd ~
mkdir ADAS.git
cd ADAS.git
  • 初始化仓库,--bare代表仓库是裸的,方便之后上传文件
git init --bare
  • 查看目录下的文件
git@jetson-desktop:~$ ls ~/ADAS.git/
branches  config  description  HEAD  hooks  info  objects  refs

这个目录是一个 Git 仓库的裸版本(bare repository),通常用于作为远程仓库或共享仓库,不包含工作目录,只包含 Git 版本库的核心内容。
以下是这些目录和文件的简要说明:
branches/: 存放分支的目录,每个分支对应一个文件。
config: Git 仓库的配置文件,包含仓库的配置信息。
description: 仓库的描述文件,通常为空文件。
HEAD: 指示当前所在分支或提交的文件。
hooks/: 存放 Git 钩子脚本的目录,可以在特定事件触发时执行自定义操作。
info/: 存放仓库的一些额外信息和配置文件。
objects/: 存放 Git 版本库中所有的对象(commits、trees、blobs)。
refs/: 存放分支和标签的引用(references)。
这个目录结构是一个典型的 Git 裸仓库的组成部分。裸仓库通常用于远程仓库,供多个开发者协作使用,或者用作备份和共享中心。

二、Ubuntu客户端Git安装、配置

  • 安装git
sudo apt update
sudo apt install git
  • 验证是否安装成功
git --version
  • 配置user.nameuser.email,可以不填真实姓名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

比如:

git config --global user.name "xiaolan"
git config --global user.email "xiaolan@qq.com"
  • 克隆远程仓库,第一次会提示克隆了空的仓库
git clone git@192.168.5.5:~/ADAS.git
  • 添加代码库第一个文件,新建README.md
cd ADAS
touch README.md
echo "hello git!" > README.md

写好代码后需要提交,下面介绍git提交代码的流程:
在这里插入图片描述

  • 查看工作目录状态,这里显示未跟踪,因为还没有暂存
xiaolan@ubuntu:~/Documents/ADAS$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        README.md

nothing added to commit but untracked files present (use "git add" to track)
  • 添加到暂存区,这时候显示new file了
xiaolan@ubuntu:~/Documents/ADAS$ git add README.md 
xiaolan@ubuntu:~/Documents/ADAS$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   README.md
        
  • 提交到版本库
xiaolan@ubuntu:~/Documents/ADAS$ git commit -m "新增了README.md,走出了坚实的一大步"
[master (root-commit) ce4ec07] 新增了README.md,走出了坚实的一大步
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
xiaolan@ubuntu:~/Documents/ADAS$ git status
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)
nothing to commit, working directory clean

这里有一个报错(你们不一定有):提示 Your branch is based on ‘origin/master’, but the upstream is gone.,意思是你当前的分支与远程仓库的 origin/master 分支关联已经丢失。
使用以下命令来清除分支的上游关联:
git branch --unset-upstream
将本地的 master 分支与远程仓库重新关联起来,可以使用:
git push --set-upstream origin master

  • 解决报错
xiaolan@ubuntu:~/Documents/ADAS$ git branch --unset-upstream
xiaolan@ubuntu:~/Documents/ADAS$ git push --set-upstream origin master
git@192.168.5.5's password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.5.5:~/ADAS.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
  • 查看提交历史记录
xiaolan@ubuntu:~/Documents/ADAS$ git log
commit ce4ec0785102d1dd9dbb48c2678d67e8b3dd41c2
Author: xiaolan <xiaolan@qq.com>
Date:   Sat May 11 16:37:51 2024 +0800

    新增了README.md,走出了坚实的一大步
  • 推送到远程仓库(可选)
xiaolan@ubuntu:~/Documents/ADAS$ git push origin master
git@192.168.5.5's password: 
Everything up-to-date

这里出现了branch,即分支,观察 git 官方logo,也有个分支的形状,branch是 git 能够多人协作的基本机制。
git官网logo

就像多元宇宙的世界线一样,在你新建分支的时候,你便拥有了自己的世界线。
你可以选择自己的工作内容编写,然后暂存,提交到版本库,等到需要整合大家的工作代码时,便发生合并,统一为一个版本。

当然这里面会出现许多冲突,比如多个人修改了同一段代码,但是合并的分支只需要一个版本,这时候就需要审核员判断并手动解决。所以在工作之前先把当前最新的工作代码拉取到本地对照,保持本地与远程仓库的同步,将是个好习惯。

  • 查看当前分支
xiaolan@ubuntu:~/Documents/ADAS$ git branch
* master
  • 新建分支并切换到该分支
xiaolan@ubuntu:~/Documents/ADAS$ git checkout -b xiaolan
Switched to a new branch 'xiaolan'
xiaolan@ubuntu:~/Documents/ADAS$ git branch #你会看到带有 * 符号的分支名称是新创建的 xiaolan
  master
* xiaolan
  • 现在你可以在新分支 xiaolan 上进行代码修改、提交等操作。
  • 切换回主分支(可选)
xiaolan@ubuntu:~/Documents/ADAS$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
xiaolan@ubuntu:~/Documents/ADAS$ git branch
* master
  xiaolan
  • 使用xiaolan分支,修改,暂存,提交,推送代码
xiaolan@ubuntu:~/Documents/ADAS$ git checkout xiaolan
Switched to branch 'xiaolan'
xiaolan@ubuntu:~/Documents/ADAS$ echo "hello, i am xiaolan!" > README.md 
xiaolan@ubuntu:~/Documents/ADAS$ git add README.md 
xiaolan@ubuntu:~/Documents/ADAS$ git commit -m "README.md modified by xiaolan"
[xiaolan 8277300] README.md modified by xiaolan
 1 file changed, 1 insertion(+), 1 deletion(-)
xiaolan@ubuntu:~/Documents/ADAS$ git push origin xiaolan 
git@192.168.5.5's password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 270 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.5.5:~/ADAS.git
 * [new branch]      xiaolan -> xiaolan
  • 查看提交历史记录
xiaolan@ubuntu:~/Documents/ADAS$ git log
commit 827730004dfd675af9391fa191272ad6c08309b4
Author: xiaolan <xiaolan@qq.com>
Date:   Sat May 11 17:16:29 2024 +0800

    README.md modified by xiaolan

commit ce4ec0785102d1dd9dbb48c2678d67e8b3dd41c2
Author: xiaolan <xiaolan@qq.com>
Date:   Sat May 11 16:37:51 2024 +0800

    新增了README.md,走出了坚实的一大步
  • 合并分支,为了效果更明显,我们先进入master分支,改变README.md的第一行和第三行内容,来人为制造冲突
xiaolan@ubuntu:~/Documents/ADAS$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
xiaolan@ubuntu:~/Documents/ADAS$ vim README.md 
xiaolan@ubuntu:~/Documents/ADAS$ cat README.md 
hello git! <conflict1>

<conflict2>
xiaolan@ubuntu:~/Documents/ADAS$ git add README.md 
xiaolan@ubuntu:~/Documents/ADAS$ git commit -m "新增了conflict"
[master dfd6f91] 新增了conflict
 1 file changed, 3 insertions(+), 1 deletion(-)
xiaolan@ubuntu:~/Documents/ADAS$ git push origin master 
git@192.168.5.5's password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 281 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.5.5:~/ADAS.git
   ce4ec07..dfd6f91  master -> master
xiaolan@ubuntu:~/Documents/ADAS$ 

合并分支的步骤
在这里插入图片描述

  • 合并xiaolan分支到master分支需要切换到master分支
xiaolan@ubuntu:~/Documents/ADAS$ git branch
* master
  xiaolan
  • 使用git merge命令合并
xiaolan@ubuntu:~/Documents/ADAS$ git merge xiaolan
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
  • 出现冲突
xiaolan@ubuntu:~/Documents/ADAS$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
  • 查看冲突
xiaolan@ubuntu:~/Documents/ADAS$ cat README.md 
<<<<<<< HEAD
hello git! <conflict1>

<conflict2>
=======
hello, i am xiaolan!
>>>>>>> xiaolan

<<<<<<< HEAD 表示当前分支(通常是目标分支,如 master)的内容。
======= 是分隔符,用于分隔两个不同分支的内容。
>>>>>>> branch_name 表示要合并的分支(如 xiaolan)的内容。

  • 手动编辑冲突文件,选择保留或修改其中的内容,以解决冲突。删除冲突标记 <<<<<<<、=======、>>>>>>> 并保留正确的代码。
xiaolan@ubuntu:~/Documents/ADAS$ vim README.md 
xiaolan@ubuntu:~/Documents/ADAS$ cat README.md 
hello git! <conflict1>
hello, i am xiaolan!
<conflict2>
  • 暂存,提交,推送解决冲突后的代码
xiaolan@ubuntu:~/Documents/ADAS$ git add README.md 
xiaolan@ubuntu:~/Documents/ADAS$ git commit -m "解决了conflict"
[master f06d9bb] 解决了conflict
xiaolan@ubuntu:~/Documents/ADAS$ git push origin master 
git@192.168.5.5's password: 
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 325 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.5.5:~/ADAS.git
   dfd6f91..f06d9bb  master -> master
xiaolan@ubuntu:~/Documents/ADAS$ 
  • 到此便合并成功

三、vscode使用git协作

想必了解了这么多关于git的用法,大家还是会觉得使用命令行过于繁琐,尤其是涉及到的文件很多时,解决冲突会变成一场灾难,所以这里介绍使用vscode自带的gui来轻松完成上面复杂的工作。

  • vscode集成git

进入vscode,左边工具栏自带git工具,里面有很多选项,见下图:
在这里插入图片描述
选项栏内容
在这里插入图片描述
工程目录下文件改动的标记
在这里插入图片描述在这里插入图片描述

  • 使用vscode进行协作

  • 创建并更改分支,创建时输入分支名,如xiaohong,等同于git checkout -b xiaohong
    在这里插入图片描述
    在这里插入图片描述

  • 暂存改动后的文件,等同于git add README.md
    在这里插入图片描述

    在这里插入图片描述

  • 输入提交信息,等同于git commit -m "修改了 README.md"
    在这里插入图片描述

  • 点击同步更新,等同于git push origin xiaohong
    在这里插入图片描述

  • 拉取master版本,同步更改(推送代码前最好先拉取主分支)
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 合并分支,等同于’git checkout master’加’git merge xiaohong’
    在这里插入图片描述
    在这里插入图片描述

  • 出现合并冲突
    在这里插入图片描述

  • 手动修改解决冲突
    在这里插入图片描述在这里插入图片描述* 我这里保留双方修改
    在这里插入图片描述

  • 然后又是,暂存,提交,同步更改

  • 到此,合并完成

四、Git Graph插件

  • 点击vscode左侧插件工具栏,搜索Git Graph安装
    在这里插入图片描述

  • 回到git管理,多出一个Git Graph图标,点击
    在这里插入图片描述

  • 哇哦,多么美妙的图形,将分支非常直观地展现出来了,可以发现:

  1. 每个节点都是commit提交的记录
  2. 当发布新的分支时,主分支便会分出一条支线,合并分支时,便会回到主分支
    在这里插入图片描述
  • 不只如此,点击各个节点还能看到详细信息
    在这里插入图片描述

  • 右键点击右侧的文件
    在这里插入图片描述
    View Diff:查看本次commit提交的文件和提交前的文件的对比
    在这里插入图片描述
    View File at this Revision:查看本次修改的文件
    在这里插入图片描述
    View Diff with Working File:查看本次commit提交的文件和工作区的文件的对比
    在这里插入图片描述

五、总结

  • 介绍了如何在Ubuntu服务器搭建Git仓库
  • 介绍了如何使用Git命令
  • 介绍了如何使用VsCode集成的Git工具
  • 介绍了实用的Git Graph插件
  • 使用Git协作来提高效率的例子
    在这里插入图片描述

参考资料:
基于Ubuntu环境Git服务器搭建及使用
Git 基本命令汇总
GIT常用命令大全——赶紧收藏
手把手教你在VSCode中使用Git
Git版本控制:提升开发效率的利器

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 搭建一个Git服务器是一个相对容易的过程,以下是一个简单的步骤: 1. 获取一个Linux操作系统,如Ubuntu或CentOS。确保你具有root权限。 2. 在服务器上安装Git软件。使用以下命令在终端中运行: 对于Ubuntu系统: ``` sudo apt-get update sudo apt-get install git ``` 对于CentOS系统: ``` sudo yum update sudo yum install git ``` 3. 创建一个新用户来管理Git服务器。可以使用以下命令创建一个名为"git"的用户: ``` sudo adduser git ``` 设置一个密码并记录下来。 4. 切换到git用户。可以使用以下命令: ``` su git ``` 5. 创建一个专门用于存储Git仓库的目录。可以使用以下命令来创建目录并进入该目录: ``` mkdir gitrepo cd gitrepo ``` 6. 初始化Git仓库使用以下命令: ``` git init --bare ``` 7. 退出git用户并返回root用户。 ``` exit ``` 8. 配置SSH认证。使用以下命令编辑SSH配置文件: ``` sudo nano /etc/ssh/sshd_config ``` 找到以下行并取消注释修改为"yes",确保SSH密钥认证是启用的: ``` PubkeyAuthentication yes ``` 保存并退出。 9. 重启SSH服务以使更改生效。使用以下命令: 对于Ubuntu系统: ``` sudo service ssh restart ``` 对于CentOS系统: ``` sudo systemctl restart sshd ``` 10. 现在你的Git服务器已经搭建完成。你可以通过用Git客户端克隆服务器上的仓库,例如: ``` git clone git@your_server_ip:/path/to/gitrepo.git ``` 替换"your_server_ip"为你的服务器IP地址,"/path/to/gitrepo.git"为你创建的Git仓库的路径。 这些步骤将让你能够在你的Linux服务器上搭建一个Git仓库,并开始使用。请注意,这只是最基本的过程,你还可以通过配置Git的其他特性来增强服务器的功能。 ### 回答2: 搭建一个Git服务器使用Linux操作系统的常见任务之一。以下是一个简单的步骤指导,帮助你在Linux上搭建一个Git服务器。 1. 首先,在你的Linux服务器上安装Git软件。可以使用系统的包管理器来安装,比如在Ubuntu上可以使用以下命令:`sudo apt-get install git`。 2. 创建一个用于存储Git仓库的目录。可以选择在服务器的任意位置创建,比如 `/opt/git`。使用以下命令创建目录:`sudo mkdir /opt/git`。 3. 通过以下命令进入该目录:`cd /opt/git`。 4. 初始化一个裸仓库(Bare Repository),这是一个没有工作目录的纯粹的Git仓库,用于充当服务器上的中央仓库使用以下命令创建裸仓库:`sudo git init --bare your_repository_name.git`。这里的`your_repository_name.git`是你想要创建的仓库的名称。 5. 设置仓库的权限。为了安全起见,只有具有权限的用户才能访问和推送到仓库。可以使用以下命令设置权限:`sudo chown -R git:git your_repository_name.git`。这里的`your_repository_name.git`是你刚才创建的仓库的名称。 6. 配置Git服务器,并启用SSH访问。编辑Git服务器的SSH配置文件,可以使用以下命令:`sudo nano /etc/ssh/sshd_config`。在配置文件中添加一行:`AllowUsers git`,然后保存并关闭文件。 7. 重启SSH服务以使配置生效:`sudo service sshd restart`。 8. 现在,可以通过SSH协议克隆或推送到你的Git服务器。例如,使用以下命令克隆仓库:`git clone git@your_server_ip:/opt/git/your_repository_name.git`。请记得将`your_server_ip`替换为你的服务器的IP地址,`your_repository_name.git`替换为你刚才创建的仓库的名称。 通过按照上述步骤,在Linux上搭建一个Git服务器并完成相关配置,你就可以在服务器上管理和共享你的Git仓库了。 ### 回答3: 要搭建一个基于Linux操作系统的Git服务器,需要以下步骤: 1. 安装Linux操作系统:在一台服务器上安装Linux系统,可以选择Ubuntu、CentOS等常见的发行版。 2. 安装Git软件:使用Linux系统的包管理器,如apt-get(Ubuntu)或yum(CentOS),安装Git软件。 3. 创建Git用户和组:通过命令行创建一个Git用户和一个属于该用户的组,用于管理Git仓库的访问权限。 4. 安装SSH服务:Git使用SSH协议进行远程仓库的访问和通信。确保安装并启动SSH服务,配置允许Git用户进行SSH访问。 5. 切换到Git用户:通过命令行切换到Git用户,以执行后续的操作。 6. 创建Git仓库使用Git命令创建一个新的仓库,可以使用"git init"命令来初始化一个空的仓库。 7. 配置Git仓库:通过"git config"命令配置Git仓库的参数,例如仓库名称、用户名、邮箱等。 8. 设置Git远程访问:通过SSH协议设置Git远程访问,提供SSH公钥给用户,以便他们可以通过SSH协议访问Git仓库。 9. 设置Git核心服务器钩子:在Git服务器上配置钩子,可以在提交代码或推送代码等操作时触发一些自定义的操作。 10. 测试Git服务器:确保配置正确且服务器正常运行后,使用Git命令测试访问Git仓库的各种操作,如克隆、提交、推送等。 通过以上步骤,就可以在Linux系统上成功搭建一个Git服务器,为团队提供代码托管和版本控制的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiaolan_2001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值