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

时间:2015-06-28 12:05:15

标签: git github commit git-submodules

我正在开发一个使用git的应用程序,所以我需要测试它与git的集成。在我的git存储库中,我需要有另一个存储库(my_git_repo / tests / another_repo)。如何在没有git子模块的情况下提交它? (我不想只为一个文件拥有另一个远程存储库(在github / bitbucket等中)

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

子模块不一定需要单独克隆;您可以在一个仓库中发布项目及其子模块。只需要一个专用于主仓库中子模块内容的分支,然后直接从那里克隆主仓库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承诺的内容 - 即应该检查哪些内容 - 当您不想要当前的分支提示时。

您可以使用git submodule文件和.gitmodules文件挂钩{{1}}命令,但这似乎不值得。

答案 1 :(得分:0)

我喜欢@ 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!`)
    })
  }
})

上面的代码只是在测试套件运行之前解压缩测试回购并在之后清理它们。这里的想法是根据场景的要求设置存储库,然后将它们添加到存档中。如果存储库有任何更改,那么您只需更新存档。

答案 2 :(得分:0)

您可以将嵌套的存储库转换成裸仓库。可以在另一个存储库中提交一个裸存储库。

将存储库转换为裸存储库的一种方法(更多here):

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)。