我有一个2岁的存储库,它本质上是一个私有存储库,所以它包含在它的不同点的历史记录中:密钥文件,加密密钥,各种地方的大型图像集等等,在历史上存储库,所有这些都不再被跟踪,但仍然存在于历史中。
源代码现在正在变得共享,因为我们正在引入新的开发人员,并且我希望从一个大多数干净的存储库开始。但是,在此过渡期间,我可能还必须处理旧存储库,在两个存储库之间共享补丁/提交。
在git中脱离以前的历史记录并保持向后兼容性能够尽可能干净地共享旧存储库和新的清理存储库之间的提交的最佳方法是什么?< / p>
目的:
答案 0 :(得分:2)
在现有仓库中创建一个新的,明确的分支将无济于事:如果用户可以阅读此分支,他们也可以访问包含敏感信息的旧分支。为了解决这个问题,你必须创建一个新的回购,没有(或只有有限的)过去的知识。
为实现这一目标,我将采取以下措施:
采用相对较新的回购状态(例如最后标记的版本或类似内容,比如说V1.0
)并将其用作创建新回购的开头(newrepo
)您的新开发人员使用。
然后,在您的计算机上,添加一个名为oldrepo
的{{3}},指向包含旧敏感数据的旧存储库。
接下来,将V1.0
的所有提交内容从最新的oldrepo
和remote提交到您的新回购中。此时,您的新仓库与oldrepo
的状态相同,没有脏历史记录。
现在,cherry-pick
来自newrepo
(newrepo.git
)的裸露回购。您的所有开发人员都会克隆newrepo.git
并对其进行处理。
如果要将补丁等从newrepo.git
转换为oldrepo
,反之亦然,此操作将由您完成,即您的同事发送您生成的所需补丁由format-patch
和am
他们进入旧的回购。如果您在oldrepo
中完成了一些修复,则可以再次cherry-pick
将其newrepo.git
转换为您的开发者。
这限制了oldrepo
对您的访问权限,您的同事永远不会看到任何敏感数据。
答案 1 :(得分:1)
您可以尝试(我不知道这是否有效)是创建一个单独的分支来跟踪新的开发,它从空提交开始(即没有父级)并且只是复制了内容。然后您将该分支合并回旧主(手动)。之后,您应该能够在新分支上进行开发,并将更改从旧分支转移到旧分支。而且您不必将旧分支发布给其他人。
as和image它是这样的,其中O
是原始分支,C
是新的无父分支中的副本,M
是手动合并,m
是后续的合并。
# -- # -- # -- O --- M ------------ m -- m
/ / /
/ / /
C -- # -- # -- # -- # -- #
答案 2 :(得分:0)
这取决于您通过“向后兼容性”具体表示的内容,但您应该能够为--depth 1
指定git clone
参数(如git-clone man page中所述)并获取<可以共享em> patches (虽然提交本身将无法通过您可能习惯的普通推/拉机制共享。
答案 3 :(得分:0)
使用git branch创建一个新分支。然后git rebase你的第一个到最后一次提交你的旧分支的无历史版本。
您可以随时返回旧分支以获取提交的具体详细信息。