繁体   English   中英

如何在另一个git存储库中提交git存储库

[英]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.gitgit clone test-repo.git )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM