git 使多个远程服务器与所有分支保持同步

2024-01-17

我有两台电脑,用来存储我的存储库。他们是not通过任何类型的网络连接!让我们将这两台不同电脑上的存储库命名为 repo1 和 repo2。

我有一个本地“克隆”,我可以将其从一台电脑移动到另一台电脑。让我们将这个克隆的存储库简单地命名为“克隆”。

如果我现在从原点(这里是 repo1)获取我的克隆,一切都很好。但如果我需要使用 repo2,我无法让它运行!

简单的命令

git fetch --all repo2

给我: fetch --all 不接受存储库参数

此时我不知道如何继续。

我发现了很多解决方法,例如:如何克隆Git中的所有远程分支? https://stackoverflow.com/questions/67699/how-to-clone-all-remote-branches-in-git

但没有一个答案涉及多个存储库!

这根本无法管理吗?


首先,我建议通过执行以下操作来检查您的存储库的 URL:git remote -v。对于续集,我假设您有两个名为origin and repo2.

关于你提到的SO问题 -如何克隆Git中的所有远程分支? https://stackoverflow.com/questions/67699/how-to-clone-all-remote-branches-in-git- 应该指出的是,这是unneeded检查所有分支以检索它们,因为git fetch repo2足以在本地获取远程的整个历史记录repo2.

根据git fetch 的文档 https://git-scm.com/docs/git-fetch,你也可以这样做git fetch --all(没有额外的参数)而不是git fetch origin ; git fetch repo2.

我记得为了列出与远程对应的远程分支,称为repo2,你可以这样做git branch -r这将显示类似以下内容:

origin/HEAD -> origin/master
origin/master
origin/name-of-an-origin-branch
...
repo2/HEAD -> repo2/master
repo2/master
repo2/name-of-a-repo2-branch
...

也就是说,所有远程分支都以远程的标识符为前缀。

为了浏览这些远程分支的内容(不需要互联网连接),您可以这样做gitk --all显示所有分支历史记录的只读摘要,或git checkout name-of-a-repo2-branch创建与跟踪分支关联的本地分支name-of-a-repo2-branch(参见git checkout 文档 https://git-scm.com/docs/git-checkout#Documentation/git-checkout.txt-emgitcheckoutemltbranchgt).

或者你可以进行通常的 git 操作,例如merge https://git-scm.com/docs/git-merge (e.g. git merge origin/master), rebase https://git-scm.com/docs/git-rebase (e.g., git rebase repo2/master)涉及跟踪远程存储库中的分支。

同步两个存储库的工作流程建议

关于您的主要用例(使用“本地可移动克隆”同步两个不直接通过网络连接的存储库),我认为最简单的配置是拥有一个“裸”可移动中间存储库(即没有工作目录的存储库,请参阅相应的文档 https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---bare)在给定的本地 URL 处,说“file:///path/to/bare-repo.git”。

要设置一个这样的存储库,您可以这样做:

git init --bare /path/to/bare-repo.git

然后在 repo1 中你可以进行以下设置:

git remote add sync file:///path/to/bare-repo.git
git config alias.pull-ff-sync '!f(){ git fetch sync && git for-each-ref --format "%(refname:strip=3)" refs/remotes/sync/ | grep -v -e '\''^HEAD$'\'' | xargs -n1 bash -c '\''git checkout -q "$1" && git pull --ff-only -v sync "$1"'\'' bash; }; f'
git config alias.pull-ff-sync  # to check the alias has been properly setup
# and in particular that the «'\''» have been replaced with single «'»

git config push.default matching

for b in master develop ... ; do git push sync ${b}; done
# push all the branches you want to sync

当然,repo2 中也有类似的设置:

git remote add sync file:///path/that/can/be/different/to/bare-repo.git
git config alias.pull-ff-sync '!f(){ git fetch sync && git for-each-ref --format "%(refname:strip=3)" refs/remotes/sync/ | grep -v -e '\''^HEAD$'\'' | xargs -n1 bash -c '\''git checkout -q "$1" && git pull --ff-only -v sync "$1"'\'' bash; }; f'
git config push.default matching

现在,在 repo1 中(或在 repo2 中),您可以通过以下方式同步:

  • 获取您选择的所有分支并合并它们(如果操作是)快进 https://git-scm.com/docs/git-merge#Documentation/git-merge.txt---ff-only(所以这个命令比仅仅更强大git fetch sync因为如果不需要手动合并提交,所有本地分支都将被更新):

      git pull-ff-sync
    
  • 推送您选择的所有分支(这依赖于matching设置的Push.默认配置 https://git-scm.com/docs/git-config#Documentation/git-config.txt-pushdefault):

      git push -v sync
    

注释以避免一个配置步骤

请注意,如果您不想更改push.default您的两个存储库的配置(例如,如果您还想使用git push仅将一个分支从 repo1 推送到另一个远程...),您可以改为:

  • replace

      git config push.default matching
    

    with

      git config push.default upstream  # recommended
    

    或者只是与

      git config push.default simple  # the default config in Git >= 2.0
    
  • 运行下面稍长的命令,一次性将所有匹配的分支从 repo1(resp.repo2)发送到同步远程:

      git push -v sync :
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git 使多个远程服务器与所有分支保持同步 的相关文章

  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 带有 git Remote 的 Gem 文件在 Heroku 推送上失败

    我的 gemfile 中有以下行 gem client side validations git gt email protected cdn cgi l email protection Dakuan client side valida
  • 自定义 SSH 端口上的 Git

    我的 VPS 提供商建议我将 SSH 端口保留为他们默认分配的自定义端口号 不是 22 问题是 虽然我知道我可以在创建远程配置时提供端口号 但在进行 Git 克隆时似乎无法提供相同的操作 我在用gitolite https wiki arc
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • Git 到 TFS 源代码管理迁移

    我想看看 TFS 如何为我的命令工作 所以我想将我们当前的 GIT 存储库移动到 TFS 数据库 我们使用 GIT 来获得普遍的分支支持 因此我想使用 TFS 2010 来解决该问题 现在的问题是 如何将 GIT 存储库导出到 TFS 显然
  • Git 在哪里存储标签?

    Git 在哪里存储标签 我执行 git tag v0 1 0 v0 10 0 v0 11 0 但目录 git refs tags是空的 Git 将这些标签存储在哪里 谢谢 它们也可以存储在 git packed refs
  • 仅使用 Git grep 的文件名

    我只想查看文本中包含特定单词的不同文件 current directory git grep word 显示文件中具有匹配单词的每一行 所以我尝试了这个 current directory git grep word files with
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t
  • MSysGit 与 Windows 版 Git

    我无法确定MSysGit 和 Windows 版 Git 之间的区别 http msysgit github com 它们有何不同 为什么我会选择其中之一而不是另一个 它们不是同一个东西吗 On http msysgit github co
  • Git - 远程:错误:无法运行钩子/后接收:没有这样的文件或目录

    我收到错误 remote error cannot run hooks post receive No such file or directory 当尝试推送到远程时 接收后文件存在于正确的位置 testnew git hooks 并包含
  • 尝试克隆一个 git 存储库,但它卡在克隆到中

    我使用的是 Windows 10版本 10 0 19042 内部版本 19042 GIT Ver 2 32当尝试使用 git bash 执行以下命令时git clone depth 1 b carla https github com Ca
  • 使用Git记录文件复制操作

    当我使用 git mv 在 git 中移动文件时 状态显示该文件已被重命名 即使我更改了某些部分 它仍然被认为几乎是相同的东西 这很好 因为它让我可以跟踪它的历史记录 当我复制文件时 原始文件有一些历史记录 我想将其与新副本关联起来 我尝试
  • 使用BFG时可以指定多个文件吗?

    我正在尝试删除通配符无法覆盖的多种类型的文件 我尝试使用多个 delete files 但它不接受它 还尝试将文件全部放在 delete files 之后 但它也不接受它 有没有一种方法可以将它们全部放在一个命令中 如果没有 那么我必须运行
  • git-lfs 中的多个文件版本

    我正在尝试估计 GitHub 上我的项目的存储要求 并对 git lfs 如何存储多个版本的文件有一些疑问 git lfs 是否存储多个版本的文件 如果是这样 对文件的每次更改都会导致复制整个文件 还是仅存储差异 所有版本都会计入 gith
  • 以非交互式方式查找合并提交的正确父级

    我正在准备 svn2git 迁移 同时https github com nirvdrum svn2git https github com nirvdrum svn2git虽然非常有用 但我仍然遇到了一些恶作剧 我已经清理掉了大部分 但还剩
  • 有没有一种干净的方法来处理两个以相同内容开头的原始 git 存储库?

    假设我有两个根据相同的初始内容创建的存储库 例如 如果我使用 git 来管理 etc apache2 中的 apache 配置文件 然后我运行git init分别在机器 A 和机器 B 上 此后 我对 machine b 进行了一些配置更改
  • 如何修改 git add 来处理已删除的文件?

    我从 git 存储库中删除了一些文件 现在 根据状态查看 Changes not staged for commit deleted project war favicon ico deleted project war index htm
  • 如何在多个不同的分支上工作,以便我可以在它们之间轻松切换?

    有没有办法在 GIT 中处理同一个文件但不同的功能 分支 我确信有办法 但最简单的方法是什么 我不想隐藏我的更改 因为这很麻烦 借助 SVN 我能够将 2 个独立的分支作为 2 个不同的实体进行工作 无需任何干预 并且可以轻松在两者之间切换
  • 如何在 Visual Studio 2013 中使用 Git 的外部 diff 工具?

    我找到了这个帖子 http architects dzone com articles how configure diff and merge这解释了如何让 Visual Studio 2013 在比较 Git 中的文件时使用内置 dif
  • 如何从 Git 存储库中删除选定的提交日志条目,同时保留其更改?

    我想从线性提交树中删除选定的提交日志条目 以便这些条目不会显示在提交日志中 我的提交树看起来像 R A B C D E HEAD 我想删除 B 和 C 条目 以便它们不会显示在提交日志中 但应保留从 A 到 D 的更改 也许通过引入单个提交

随机推荐

  • Jenkins 以非常高的 CPU 使用率运行

    我最近从 Jenkins 1 6 升级到 2 5 这样做之后 我注意到 CPU 使用率非常高 有时超过 300 只有 4 个核心 所以我认为它不会超过 400 我不知道从哪里开始调试这个 但这是一个线程转储 https gist githu
  • 在哪里可以找到 dojo 工具包 dijit 小部件的图标图像列表?

    我想这是一个简单的问题 但尽管进行了一些谷歌搜索 我仍然没有找到答案 有谁知道在哪里可以找到 Dojo 工具包中可用图标的列表 最好看的地方是Dojo Toolkit nightly 图标目录 http archive dojotoolki
  • 在子文件夹中搜索 VSCode,而不是整个工作区

    如何仅在工作区的一个子文件夹中进行搜索 CTRL SHIFT F searches in the whole workspace and since this is large I get way too many hits in unre
  • Objective-C - 将 CSV 解析为数组

    我如何将 CSV 解析为数组 它只是我转换为 CSV 的一列电子表格 所以应该不会太难吧 我该怎么做 使用适当的 CSV 解析器 例如https github com davedelong CHCSVParser https github
  • 如何在整数列上指定“喜欢”?

    这让我很困惑 我想我会将其提交给 SO 社区寻求帮助 用户想要选择以某个 ID 开头的所有订单 例如 123会回来123 12345 1238790等等 但是 ID 是一个 int 列 我正在使用 nHibernate 目前我的线路是 cr
  • C++ 异常会通过 C 代码安全传播吗?

    我有一个 C 应用程序调用SQLite http www sqlite org 的 SQLite 使用 C 语言 sqlite3 exec http www sqlite org c3ref exec html它又可以调用我用 C 实现的回
  • 无法在本地以及 docker 中启动“django”项目

    我在用Docker部署Python2 7申请与Django1 8 过去两天我遇到了一些问题 我发现错误如下 Docker 镜像 python 2 7 slim buster Error root 64f8c580dd0a code pyth
  • 如何使 scrapy 中的 start_url 从消息队列中使用?

    我正在构建一个 scrapy 项目 其中有多个蜘蛛 每个域一个蜘蛛 现在 要抓取的 URL 是动态地来自用户给定的查询 所以基本上我不需要进行广泛的爬行 甚至不需要跟踪链接 将会有一个接一个的网址 我只需要使用选择器进行提取 所以我在想 如
  • SQL Server SCOPE_IDENTITY() - 线程安全

    我们必须修改数据库并自己管理 IDENTITY 列 而不是依赖于 auto inc 字段 我们的解决方案是有一个 生成器 表 其中有一个 auto inc 字段 我们插入到该表中 然后读取 SCOPE IDENTITY 值以获取新的 ID
  • Android ToneGenerator 示例代码 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人使用 ToneGenerator 类获得过任何示例代码 我想生成频率范围约为 200
  • 使用 .NetCore RC2 自动化 Nuget 包推送

    我目前正在开发一个 NET Core 库 我将在另一个项目中将其用作 NuGet 包 我已经能够在项目目录中使用 dotnet pack 命令成功打包项目 并将该包上传到 MyGet 我更愿意使用 nuget Push 命令来自动化推送 N
  • 指向 C 中前向声明结构数组的指针

    我对 C 中的前向声明有疑问 Code typedef struct yhash s t yhash forward declaration struct yhash s size t size h t yhash yhash pointe
  • android:从图库中选择图像然后裁剪并显示在图像视图中

    我真的需要这个代码 我在互联网上搜索了 3 个小时 但我找不到完整而简单的代码 我测试了很多代码 但有些代码不起作用 有些代码不好 请帮助我提供完整而简单的代码代码 谢谢 编辑 我有这个用于选择图像的代码 但请为我在标题中所说的所有内容提供
  • 导入错误:pyttsx 中没有名为“driver”的模块

    我正在尝试运行语音程序Python 3 5 2与pyttsx图书馆 但我遇到了很多问题 第一个是关于发动机的 当我运行命令时import pyttsx 编译器给了我如下错误 ImportError No module named engin
  • C# 使用一个 SqlConnection 进行多个查询

    如何正确使用一SqlConnection多个查询的对象 SqlConnection connection new SqlConnection connString static void SqlQuery SqlConnection con
  • WordPress 中的 get_page_by_title。如何使用来获取帖子?

    最近 Wordpress 在 Trac 中添加了您可以使用以下方法按标题获取帖子 按标题获取页面 而不是直接查询数据库 如果我想获得标题为 我的农场 的帖子 我将如何更改参数以便它搜索帖子 或帖子类型 page title 乔伊在森林里 字
  • 在内核模块配方中发送额外的文件

    在构建树外内核模块时 有没有办法可以传送更多文件 我尝试过这样的事情 FILES PN bindir my program do install append install d D bindir install m 0755 D my p
  • 如何将 FileField 的初始值传递给 Formset(在 Django 中)

    我正在尝试使用 POST FILE 请求中的数据填充 Django 表单集 我可以填充除 FileField 之外的所有字段 看起来initial不能用于将 request FILE 传递给 FormSet 创建者函数 我的问题是如何将 F
  • PYQT4 - 如何编译 qrc 文件并将其导入到我的程序中?

    我在导入资源文件时遇到问题 我正在使用 pyqt4 和 Monkey Studio 我正在尝试导入 png 图像 当我运行该程序时 出现导入错误 例如 导入错误 没有名为 icon rc 的模块 我知道我必须使用pyrcc4 编译它 但我不
  • git 使多个远程服务器与所有分支保持同步

    我有两台电脑 用来存储我的存储库 他们是not通过任何类型的网络连接 让我们将这两台不同电脑上的存储库命名为 repo1 和 repo2 我有一个本地 克隆 我可以将其从一台电脑移动到另一台电脑 让我们将这个克隆的存储库简单地命名为 克隆