Skip to content

Git命令-远程仓库

这里使用Git命令去操作Gitee代码托管平台上的远程仓库, 提交代码到仓库中,进行代码拉取合并。

1. 在远程仓库创建项目

比如我们的仓库打算放在Gitee托管平台上,首先在Gitee上面创建项目代码仓库:
Alt text 项目叫test-gitee-project:
Alt text 一般公司不开放http方式而是通过ssh方式管理仓库:
Alt text
可以看到这里的远程仓库的地址有两种, 分别是Https地址和SSH地址。在公司日常开发中用的最多的不是Https方式获取代码,而是使用SSH协议,后续笔记也是采用SSH的地址git@gitee.com:javaee_home/test-gitee-project.git

2. 配置公钥

通过SSH方式和Gitee交互,Gitee不认识我们的机器,需要提供安全认证,需要发送我们电脑上的公钥给Gitee网站。接下来先生成我们本地电脑的公钥证书。

2.1 生成安全证书

sh
$ ssh-keygen -t rsa -Cgit@gitee.com:javaee_home/test-gitee-project.git
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/mi/.ssh/id_rsa
Your public key has been saved in /home/mi/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:0soiyFpH2/9aKxVp3p9z+3Ra29tGlVZ91gxeCxHn+OM git@gitee.com:javaee_home/test-gitee-project.git
The key's randomart image is:
+---[RSA 3072]----+
|             ++++|
|             .=.O|
|           . ..++|
|       .  +   .o.|
|    . . So o  .o.|
|.. . + o  o . . o|
|..o + +  ..  . E+|
|.. o . ... .  ++B|
|.       o+o   .BB|
+----[SHA256]-----+

公私钥生成完成后,从生成日志信息来看,公钥文件存储在/home/mi/.ssh/id_rsa.pub,查看公钥文件内容:

sh
$ cat  /home/mi/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC8AXJ1WxbY0dGhlvFwZzXNWJzisGqLf3HGHvzddXts2HKIab/iAF5hm9h85OCHox/GK90i/vXI1iTcdq2ONgeNDsBFHymwGI11xFmxqWtZUfq/qNzImXUB7VIg3dXOwrrOxRgkW9zEo1btSuER0SeAqbwdmwFN4SW9zoiYR2a0tbzZ1rA/BTiMiUUkOy/CnNN4kwyfNM6qUByZgky2w/hcE= git@gitee.com:javaee_home/test-gitee-project.git

2.2 配置Gitee的SSH公钥

登陆Gitee后,点击+选择设置选项:
Alt text 在公钥文本域中输入公钥:
Alt text 弹出框要求输入密码确认:
Alt text 此时弹出提示即是添加成功:
Alt text

3. 配置本地Git用户信息

需要注意的是要和gitee上的注册用户信息一致才行:

sh
$ git config user.name "goder037"
$ git config user.email "liujie152@hotmail.com"

4. 拉取远程代码

4.1 使用克隆命令拉取代码

sh
$ git clone https://gitee.com/javaee_home/test-gitee-project.git
Cloning into 'test-gitee-project'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
$ cd test-gitee-project
$ ll
总用量 8
drwxr-xr-x 1 mi None 0  8月  6 21:28 .
drwxr-xr-x 1 mi None 0  8月  6 21:28 ..
drwxr-xr-x 1 mi None 0  8月  6 21:28 .git
-rw-r--r-- 1 mi None 0  8月  6 21:28 README.md

可以看出gitee远程仓库默认给我们初始化一个README.md文件。

4.2 查看远程仓库信息

$ git remote -v
origin  git@gitee.com:javaee_home/test-gitee-project.git (fetch)
origin  git@gitee.com:javaee_home/test-gitee-project.git (push)

可以看到远端仓库地址前面带了origin的名称,它可以认为是git@gitee.com:javaee_home/test-gitee-project.git的简写形式,方便我们开发记忆使用git代码地址。

5. 本地提交代码

模拟本地做了一些开发,现将代码进行提交。

sh
$ touch a.txt
$ git add a.txt
$ git commit -m "Issue#8878 完成a.txt开发"
[master 75db75e] Issue#8878 完成a.txt开发
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a.txt

6. 推送Gitee仓库

6.1 推送命令介绍

本地git仓库的代码需要同步到Gitee仓库中,使得代码的变动最终生效。需要用到git push命令:
基本语法:git push [选项] [remote] [branch] ,其中:

  • remote:指定要推送到哪个远程仓库名称,通常是origin。
  • branch:指定要推送到远程的分支名称,通常是当前分支。
    比如推送到指定分支的远程仓库:git push origin dev/jack_20240815
    常见的选项有:
    -u--set-upstream:设置上游分支,方便后续的git pushgit pull
    --force:强制推送,可能会覆盖远程的历史。
    --tags:推送本地标签到远程。

6.2 推送远程

sh
$ git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 270 bytes | 270.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 9c41b8a7
To https://gitee.com/javaee_home/test-gitee-project.git
   56fc19f..75db75e  master -> master
branch 'master' set up to track 'origin/master'.

命令中带上-u表示指定本地仓库需要和远程仓库中进行交互(代码拉取和代码推送)的分支,如果远程仓库的分支不止一个,-u可以固定本地分支和远程分支对应关系,让Git明确知道要与哪个远程分支进行交互,后续交互可以直接简写git push origin或者git pull origin。当然可以继续加上远程分支名称表示和远程的其他分支交互。

6.3 再次提交推送

sh
$ touch b.txt
$ git add b.txt

$ git commit -m "Issue#123 开发完成b模块"
[master 29e2469] Issue#123 开发完成b模块
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 b.txt

$ git push origin
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 278 bytes | 278.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 66463b84
To https://gitee.com/javaee_home/test-gitee-project.git
   75db75e..29e2469  master -> master

6.4 查看远端Gitee仓库:

发现代码推送成功:
Alt text

7. 拉取Gitee仓库代码

7.1 拉取代码命令

拉取代码指的是从远程仓库获取最新的修改并将这些修改合并到您的本地仓库中,使用git pull命令:
主要语法:git pull [remote] [branch],其中

  • remote:远程仓库的名称(通常是origin)。
  • branch:要拉取的远程分支的名称。
    git pull实际上是执行了git fetchgit merge,首先获取远程仓库的最新更改,然后将它们合并到当前分支。
    加上选项--rebase表示远程变更应用到您当前工作的基础上,而不是使用合并,避免产生合并提交而且使得提交李师更叫清晰,试想你在user分支进行开发,过一段时间你发现master代码发生变化,你打算从master上拉取代码到本地可以使用最新的order模块代码,git pull实际就会有一个拉取在本地并merge的动作并产生历史日志,然后你开发完毕再将代码推送到远程user分支,在将user分支合并merge到master。看起来感觉奇奇怪怪,就像你要把我和你捆在一起,捆完过后,最后还打算把捆在一起的你我再捆在我身上😵,加上--rebase就可以避免这种现象,按照前面的例子意味着你的代码直接基于master最新的代码在user分支上开发。

7.2 拉取代码实践

举例: 现在Gitee远程仓库代码发生变更, order分支代码push到了Gitee远程仓库并且进行了合并,见下一节合并Gitee仓库代码说明。
本地仓库创建user分支:

sh
$ git checkout -b user
Switched to a new branch 'user'

进行拉取master分支代码:

sh
$ git pull origin master
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 994 bytes | 165.00 KiB/s, done.
From https://gitee.com/javaee_home/test-gitee-project
 * branch            master     -> FETCH_HEAD
   0d9ab26..ddca09b  master     -> origin/master
Merge made by the 'ort' strategy.
 c.txt | 1 +
 d.txt | 1 +
 e.txt | 1 +
 3 files changed, 3 insertions(+)
 create mode 100644 c.txt
 create mode 100644 d.txt
 create mode 100644 e.txt

查看日志:

sh
$ git log
commit 934542b1176bf8d7eb7a970737c6341d95c2ec14 (HEAD -> user)
Merge: 8bf4f09 ddca09b
Author: goder037 <liujie152@hotmail.com>
Date:   Tue Aug 6 23:31:35 2024 +0800

    Merge branch 'master' of https://gitee.com/javaee_home/test-gitee-project into user

commit 8bf4f09d9c458ee07715cdb2e07879d6061010dd
Author: goder037 <liujie152@hotmail.com>
Date:   Tue Aug 6 23:31:14 2024 +0800

    Issue#3455 完成f模块开发

commit ddca09b7c0773e2881a46b704e92aff9b19ce467 (origin/master, origin/HEAD)
Merge: 0d9ab26 4900ae2
Author: goder037 <liujie152@hotmail.com>
Date:   Tue Aug 6 15:29:22 2024 +0000

    !1 合并order到master
    Merge pull request !1 from goder037/order

8. 合并Gitee仓库代码

这里的合并指的是远端Gitee的不同分支的合并,现在一般Gitee仓库公司开发都不允许本地能够直接推送到master分支上,需要提交一个Pull Request或者Merge Request进行接管合并master的操作, 所以不能直接通过git命令完成后续合并代码。
比如现在有同事已经完成order模块开发,现在推送到了order分支上,进行请求PR操作。
点击新建Pull Request按钮: Alt text
选择order->master合并的顺序:
Alt text
点击审查通过和测试通过按钮:
Alt text
点击合并分支按钮: Alt text
Gitee会进行自动合并,提示合并完成: Alt text