【Git】07 本地仓库同步到GitHub或Gitee


文章目录

  • 一、远端仓库配置
    • 1.1 配置密钥认证
    • 1.2 新建仓库
  • 二、本地配置
    • 2.1 添加远程库
  • 三、push推送
  • 四、拉取合并与推送
    • 4.1 拉取fetch
    • 4.2 合并merge
    • 4.3 推送push
  • 五、总结


一、远端仓库配置

1.1 配置密钥认证

1)ssh-keygen
本地端命令行上执行ssh-keygen命令,
得到生成的密钥(公钥):cat ~/.ssh/id_rsa.pub
打开GitHub或Gitee,在头像展开设置中找到SSH公钥,新建SSH,随便取名,并将上面id_rsa.pub内容复制粘贴到公钥文本框中,到此密钥便配置完成。

通过命令查看本地与远端Gitee是否连接成功:

ssh -T [email protected]
Hi asdfv1929(@asdfv1929)! You've successfully authenticated, but GITEE.COM does not provide shell access.

1.2 新建仓库

在Gitee上新建仓库test
【Git】07 本地仓库同步到GitHub或Gitee_第1张图片

创建完成后,页面会跳转到如下内容,显示常用的Git命令操作:
【Git】07 本地仓库同步到GitHub或Gitee_第2张图片

二、本地配置

2.1 添加远程库

通过git remote add name url在本地仓库端添加远程仓库的路径:

git remote add gitee https://gitee.com/asdfv1929/test.git

git remote -v 查看本地的远程仓库:

git remote
gitee

git remote -v    # -v 表示显示详细内容
gitee   https://gitee.com/asdfv1929/test.git (fetch)
gitee   https://gitee.com/asdfv1929/test.git (push)

三、push推送

先看一下本地有哪些分支,之后便将本地仓库中的所有分支都推送到远端仓库上。

git branch -av
* master cb27ad9 add file2 second edit
  temp   1395813 add readme

git push gitee --all          # 所有分支都推送到指定名称的远端上,,或者是指定分支名
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 6 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 561 bytes | 561.00 KiB/s, done.
Total 7 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/asdfv1929/test.git
 * [new branch]      master -> master
 * [new branch]      temp -> temp

推送成功后,远程仓库中刷新下页面就能看到已包含相关内容:
【Git】07 本地仓库同步到GitHub或Gitee_第3张图片

四、拉取合并与推送

在推送过程中也可能会遇到这样的问题:

git push gitee master    # 将本地仓库的master分支推送到远端
To https://gitee.com/asdfv1929/test.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://gitee.com/asdfv1929/test.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

上述过程中,其他分支推送正常,但master分支报错:! [rejected] master -> master (fetch first)
这是因为远端仓库中也有个master分支(两边分支内容不一致),此时需要先将远端master拉取到本地,进行合并后,再去push到远端。

4.1 拉取fetch

拉取指定远程端的特定分支master到本地:

git fetch gitee master     # 拉取指定远程端的特定分支,会形成单独的一棵树
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 956 bytes | 43.00 KiB/s, done.
From https://gitee.com/asdfv1929/test
 * branch            master     -> FETCH_HEAD
   0c04709..7610824  master     -> gitee/master

4.2 合并merge

在本地端将远端的master分支合并到本地端master分支上:

git checkout master       # 先切换到本地master分支

git branch -av            # 查看所有分支
* master               5343aab second edit
  temp                 1395813 add readme
  remotes/gitee/master 7610824 update readme.
  remotes/gitee/temp   1395813 add readme

# 合并
git merge --allow-unrelated-histories gitee/master
Auto-merging readme
CONFLICT (content): Merge conflict in readme
Automatic merge failed; fix conflicts and then commit the result.

但此时遇到报错,Git提示在readme文件中发生冲突。
那么在本地就去看下readme文件的内容,可以发现有如下一些东西:

cat readme
this is a test of push
<<<<<<< HEAD


second edit
=======
hahhahahahaha
hahahahahah
>>>>>>> gitee/master

<<<<<<< HEAD和 “======” 之间的内容是当前分支之前的修改,
“======” 和>>>>>>> gitee/master 之间内容是远端master分支上的修改。
因此,Git在这边报冲突,其实就是它无法判断哪些需要保留哪些需要删除,此时就需要人为去干预,去保留或是删除文件中冲突的部分
这边选择都保留下来:

cat readme
this is a test of push

second edit
hahhahahahaha
hahahahahah

4.3 推送push

保留或删除的人为干预操作做完之后,就可以再次进行添加、提交与最后的推送到远端库上。

git add .

git status
On branch master
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:
        modified:   readme

git commit -m "merge readme"
[master 73c6ad9] merge readme

git push gitee master
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 6 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 548 bytes | 548.00 KiB/s, done.
Total 6 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/asdfv1929/test.git
   7610824..73c6ad9  master -> master

远端仓库上的内容已发生更新:
【Git】07 本地仓库同步到GitHub或Gitee_第4张图片

pull = fetch + merge

五、总结

本文主要讲得是将本地端代码同步到远程仓库中,这个远程仓库可以是互联网上的Gitee或GitHub公共库,也可以是公司或部门内部的私有代码库。对于这同步过程中的操作,得牢记于心。


你可能感兴趣的:(Git,git)