我该如何安全提交一个.git目录?

4

我正在开发一个与git相关的软件,我已经在我的代码中包含了单元测试。

我创建了一个用于测试的git项目(位于子目录下):resources/test-git-project
这个测试git项目没有关联到任何远程仓库,但它包含了提交、标签和分支。

最安全的方法是如何在git中提交resources/test-git-project的内容?


只是为了明确一下:您有一个名为 resources/test-git-project 的 git 存储库,然后在其中创建了一个嵌套的 git 存储库 .git 下面,还是您创建了一个空的 git 存储库,并想知道空存储库中的 .git 目录是什么? - Andrejs Cainikovs
我还是不明白你的问题。你是在问如何处理你的代码库,比如提交更改吗?你所说的最安全的方式是什么意思? - Andrejs Cainikovs
@Andrejs Cainikovs 我试图提交一个测试git仓库的内容(它是我的真实仓库的子目录),作为普通文件。我正在尝试找出如何提交.git目录,以便任何检出项目的人都可以按照我提交的方式获取它,以执行单元测试? - Marinos An
.git 是 git 仓库的内部目录,您不应该触碰它。存储在那里的所有内容都会自动处理。要么是我因为问题不清楚而误解了问题,要么是您正在做一些完全错误的事情。 - Andrejs Cainikovs
2
@AndrejsCainikovs 如果你需要一个Git仓库作为测试资产,比如构建一个使用Git的插件,你需要一个已知状态的Git仓库来操作,并且你需要将该资产提交到另一个仓库。这是一种有点奇怪的情况,但它确实存在。 - Ralph Callaway
1
@RalphCallaway 那正是我的使用情况 :) - Marinos An
3个回答

3
您可以选择将其压缩或将其作为git子模块添加,具体取决于您希望多频繁更改内容以及哪些.git文件夹的部分对测试很重要。
将其作为子模块添加将使访问.git目录更加容易,但实际上并不会提交目录的内容和管理其修订。由于执行git pull时(如果添加/删除分支,如果重置分支,如果在本地创建悬空对象等),不同的克隆将具有不同的内容。
您还可以使用--git-dir选项进行一些操作。

Zip似乎是个不错的想法,但我会等一段时间再找更好的。 - Marinos An

3

感谢Thibault D.的回答,我找到了我要寻找的解决方案:

我已经重命名.gitgitdir,现在可以提交:

当我想执行更新或查看测试存储库的状态时,我执行以下操作:

git --git-dir=resources/test-git-project/gitdir --work-tree=resources/test-git-project anycommand

在执行单元测试之前,我会将目录resources/test-git-project复制到/tmp下,并将/tmp/test-git-project/gitdir重命名为/tmp/test-git-project/.git,这样我就不必在我的测试代码中使用--git-dir选项。


-2

你不应该嵌套使用 Git 仓库。

应该为代码和测试拥有一个唯一的仓库(这是比较常见的做法),或者拥有两个独立的仓库,但它们在文件系统中处于同一层级,而不是嵌套在另一个仓库中。


“嵌套”的 git 存储库在这种情况下只是用于测试的资产,因此将其检入另一个 git 存储库是有意义的。” - NSjonas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接