[英]How to commit a git repository inside another git repository
我正在开发一个使用git的应用程序,所以我需要测试它与git的集成。 在我的git存储库中,我需要有另一个存储库(my_git_repo / tests / another_repo)。 如何在没有git子模块的情况下提交它? (我不希望只有一个文件的另一个远程存储库(在github / bitbucket等))
有任何想法吗?
子模块不一定需要单独克隆; 您可以在一个仓库中发布项目及其子模块。 只需要一个专用于主repo中子模块内容的分支,然后在克隆主repo git clone -sb
直接从那里获取子模块。
# setup your current repo this way:
( git init sub
cd sub
> file
git add .
git commit -m-
git remote add origin ..
git push -u origin master:sub/master
)
在新克隆中设置:
git branch -t sub/master origin/sub/master
git clone -sb sub/master . sub
和sub
将拥有最新的内容。
git rev-parse :sub
会告诉你什么是sub
- 即什么应该检查 - 当你不只是想要当前的分支提示。
你可以在这里使用.gitmodules
文件连接git submodule
命令,但是这几乎不值得。
我喜欢@ hvd的回复,我认为应该是一个值得投票的答案:
您可以将已设置的子存储库包含为zip文件 - 或者您喜欢的任何其他格式 - 然后让您的测试创建或清除目录,然后只需将子存储库解压缩。 也就是说,虽然它大大降低了运行测试的复杂性,但却大大增加了创建和维护测试的复杂性,所以这不是我推荐的。
在某些情况下,子模块对于简单的问题来说太复杂了。 我的代码已经使用类似于原始问题的设置。 我的问题是涉及测试回购,其中那些回购(其中3个)将仅用于使用已知提交的实际回购进行测试。 所以我想将这些repos添加到git中,就像任何其他子文件夹一样,没有子模块的复杂性......这是为了测试大声哭泣。 我需要历史记录在那些测试回购中。 我注意到子模块的复杂性实际上大于所说的“创建和维护测试的复杂性”......实际上它很简单。
const GitMockReposWD = Path.resolve(__dirname, 'mocks/git')
before(`Decompress git mock repos...`, function (done) {
if (!Fs.existsSync(GitMockReposWD)) {
console.log(`Decompressing git mock repos...`)
const Decompress = require('decompress')
Decompress(Path.resolve(__dirname, 'mocks/git-mock-repos.zip'), GitMockReposWD).then(() => {
console.log('Done decompressing!')
done()
})
} else {
console.log(`git mock repos already exist...`)
done()
}
})
after(`Clean git mock repos...`, function () {
if (Fs.existsSync(GitMockReposWD)) {
console.log(`Cleaning git mock repos...`);
Fs.rmdir(GitMockReposWD, () => {
console.log(`Done cleaning git mock repos!`)
})
}
})
上面的代码只是在测试套件运行之前解压缩测试回购,然后清理它们。 这里的想法是根据场景的要求设置存储库,然后将它们添加到存档中。 如果存储库有任何更改,那么您只需更新存档。
您可以将嵌套的存储库转换为裸存储库。 可以在另一个存储库中提交裸存储库。
一种方法(更这里 )来转换一个仓库为纯仓库:
git clone --bare test-repo
cd test-repo.git # directory created by previous command
git remote rm origin # to remove the pointer to your original repo
现在, test-repo.git
可以在您的主存储库中提交。 如果在某些时候,您想在测试库中进行编辑(编辑文件,添加提交),您可以将其克隆回非裸git clone test-repo.git
( git clone test-repo.git
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.