是否可以在 Github 和 Gitlab 上放置一个 Git 存储库?

Luu*_*aar 5 git github gitlab

是否可以在 github 和 gitlab 上同时放置一个 git repo?所以如果你推送到一个远程仓库,它同时在 Github 和 Gitlab 上。

que*_*atl 11

你误解了 Git 的工作原理。或者内容托管的工作原理。

首先,你的 repo 不在 GitHub 上,也不在 GitLab 上。你的 repo 在你的硬盘上,就在你克隆或创建它的地方。这是一个存储库。本地的。这是您工作的地方 *)

在 GitHub 和 GitLab 上,您可以设置存储库的远程副本。然后,在对本地存储库做了一些工作后,您可以指示本地存储库将这些新工作发送到该远程副本。或者到另一个远程副本。或将 50 个远程副本保存在不同的地方。

第二个事实是,GitHub 和 GitLab是分开的。事实上,有一个 GitHub,但没有一个 GitLab。有许多 GitLab,您甚至可以购买服务器并托管您自己的 GitLab。这只是强调它们都是独立的。您发送到 GitHub 的任何内容都不会神奇地出现在 GitLab1、GitLab2 或 (..)

第三个事实,它们都是独立的,但它们都允许您托管 git 存储库的副本。由于您可以指示本地存储库将内容发送到多个遥控器,因此您可以将它们全部同步。

但是,每次要推送时都将所有 URL 粘贴到所有服务器会很麻烦,因此可以教您本地的 git 存储库了解远程位置并为您记住它们。这个调用remotes,你可能已经看到它的形式:

git push origin master
          \        \
           \        branch to be pushed
            name of the remote
Run Code Online (Sandbox Code Playgroud)

origin是您使用的单个远程服务器的典型名称。但是如果你想要很多,你可能想设置一些有意义的名字,比如:

git remote add remote-github (url-to-repo-on-github)
git remote add remote-gitlab1 (url-to-repo-on-gitlab1)
git remote add remote-gitlab2 (url-to-repo-on-gitlab2)
...
Run Code Online (Sandbox Code Playgroud)

这会设置 3 个以上具有不同名称的遥控器。现在你可以:

git push remote-github master
git push remote-gitlab1 master
Run Code Online (Sandbox Code Playgroud)

等等。这将起作用 - 基本上,进行代码更改,提交,将它们推送到 3 个以上的服务器,并且您“在 GitHub 和 GitLab 上拥有相同的东西”。请记住,如果您并不孤单,并且如果您让某人分别在 GitHub/GitLab 上处理您的代码,则每个人都需要同时以相同的顺序推送到所有远程服务器,否则可能会很快发生分歧。

手动推送到 2 个以上的遥控器也可能有些麻烦,即使它们的名字会被记住。这就是为什么最近的 Git 版本允许在远程的单个名称下设置多个推送 URL

此外,Git 存储库和一些 Git 托管支持“触发器”或“挂钩”。这些东西允许您设置一个脚本,每次发生某些事情时都会执行该脚本。像提交或推送之类的东西。使用它,您可以指示您的主机,例如,在每次收到推送时推送到另一个远程存储库。但我不会覆盖它,这里&现在,我想你已经有足够的关键词来搜索了!

*) 好吧,除了一些半自动化的东西,比如 PRs/MRs/Reviews/Issues/etc - 但这特定于您的工作流程和托管站点上的支持。显然,由于站点是独立的,并且由于对功能的支持可能不同,因此在一个站点上执行的 PRs/MRs/Reviews/../etc 不会神奇地转移到其他站点。如果特定功能是通过分支实现的,那么您可以通过一些钩子和脚本来同步它。否则,您需要为该站点找到合适的插件。或者,好吧,自己写。IIRC,至少 GitLab 有一个 API。


Max*_*nov 7

是的。您可以为存储库创建镜像。GitHub 和 Gitlab 都有这个功能。

Gitlab 文档。

Github 文档

  • 值得一提的是,GitHub 页面上描述的“镜像”远不如 GitLab 提供的机制。它主要描述手动克隆和设置远程推/拉,没有 gitlab 中的自动化 IAS (3认同)