【问题标题】:How can automatically update a directory/repo which is a subset of another directory/repo?如何自动更新作为另一个目录/存储库子集的目录/存储库?
【发布时间】:2021-06-05 14:33:06
【问题描述】:

我有以下无法解决的问题:

我的本​​地机器上有两个版本控制的目录。一个是dirA,它拥有我的很多东西,是一个我不想分享的私人回购。另一个是dirB,一个小型的public repo,里面有我想要分享的文件,主要是给别人克隆和拉取,所有的变化都是我自己做的。

问题是dirB 保存的文件都来自dirA,它基本上是dirA 的一个子集,尽管它有另一种结构。

每当我对dirAdirB 中的文件进行更改时,我想更新dirB,然后将更新后的文件推送到公共存储库。

我尝试使用rsyncunison,但每次更新我提到的特定文件时都必须手动操作,效率不高。我收集了 git 子模块或钩子可以帮助我,但我不明白我应该使用什么工具。

实际上,我有:

dirA/ (larger private repo with my stuff)
|
|--- file1
|
|--- file2
.
.
.--- fileN

dirB/ (public repo that I want to update only when the relevant files from dirA are updated)
|
|--- SubjectA/
|       |
|       |--- file3
|
|--- SubjectB/
        |
        |--- file11
.
.

理想情况下,我希望当我在本地更新 dirA 并推送到远程时,dirB 也会在本地更新,然后它也会被推送到远程。

我怎样才能做到这一点?

谢谢。

【问题讨论】:

  • 如何在您的目录 A 中的文件的目录 B 中创建符号链接。每当更新 A 的文件时,它们应该自动更新其 B 对应文件
  • 符号链接对我不起作用,它只是指向文件在dirA 中的位置。所以当我将dirB 推送到 gitlab 时,我只得到一堆链接而不是实际文件。
  • 您是否尝试仅创建硬链接。我相信它们也应该同步,并且实际文件会被推送到您的仓库,而不仅仅是简单的链接。
  • 最初我认为它不起作用,因为我认为它没有指向同一个inode。我刚刚尝试过,但它似乎可以工作!
  • @AsifKamranMalick 好吧,我做了一些检查,似乎一旦我的 PDF 是从 LaTex 编译的并且确实存在,那么使用硬链接就可以了!这解决了我的大部分问题,谢谢!

标签: git version-control gitlab git-submodules githooks


【解决方案1】:

由于您的要求是保持文件同步并且能够推送真实文件(不是纯链接),您可以简单地为感兴趣的文件创建硬链接。

您可以按如下方式创建硬链接:

ln <src-file-path> <path-to-the-link>

这应该为您的文件创建一个硬链接,原始文件中的任何更改都会反映在新创建的文件中,并且推送到存储库会产生一个真正的文件,而不是一个链接。

注意:确保您不提供-s 开关,因为它会创建一个软链接。

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2012-01-19
    相关资源
    最近更新 更多