3

请注意,我是 Git 新手。

我有两个回购:

  1. Libgdx 回购协议
  2. gdx-sqlite 回购协议

主存储库是 Libgdx REPO,我所有的工作都进入这个存储库,主要是在gdx-sqlite 项目中。因为我希望 gdx-sqlite 项目显示为一个单独的存储库,所以我所做的是:

  1. 在 GitHub 上创建了一个新的 repo (gdx-sqlite REPO)
  2. 在我的机器上创建了一个本地存储库(嵌套在本地 libgdx 存储库中)
  3. 将本地嵌套 repo 的所有代码推送到远程 gdx-sqlite REPO

这导致一切都出错了,我认为嵌套存储库是罪魁祸首。后来我删除了本地嵌套存储库并恢复到以前的提交。我发现这类问题的解决方案是 Git 子模块,但我完全迷失了我想要实现的目标,如下所示。

现在我应该如何根据以下情况来实现这一目标:

  1. 我想创建一个位于“gdx-sqlite REPO”的新仓库,它应该始终反映我对位于https://github.com/mrafayaleem/libgdx/tree/master/extensions/gdx-sqlite ”的项目所做的更改"
  2. 任何向“gdx-sqlite REPO”发送拉取请求的人都应该能够拉取所有依赖项(即完整的 libgdx REPO),以便他可以立即处理该扩展。

怎样才能做到这一点?

4

3 回答 3

6

你是对的。这种情况的好方法是使用Git submodules。这是在 Git 中处理依赖关系的最佳方式。

由于gdx-sqlite是您的主项目Libgdx的扩展,您可以通过这种方式将其添加为子模块:

git clone git@github.com:mrafayaleem/libgdx.git libgdx
cd libgdx
# remove the old directory
rm -rf extensions/gdx-sqlite
git add extensions/gdx-sqlite
# add the submodule (note the read-only URL)
git submodule add git://github.com:mrafayaleem/gdx-sqlite.git extensions/gdx-sqlite
# commit the changes
git commit -m 'Add submodule for the gdx-sqlite extension'

然后克隆您的项目(及其所有子模块):

git clone --recursive git://github.com/mrafayaleem/libgdx.git

或者为您(具有写访问权限):

git clone --recursive git@github.com:mrafayaleem/libgdx.git
于 2013-05-13T08:38:37.317 回答
2

你应该看看git subtree。这允许您添加一个或多个 git 存储库作为子树。

缺点之一是,您需要谨慎对待您的提交。如果您对不同子树中的文件提交多项更改,则所有存储库都将在其历史记录中包含此提交。如果您尝试在一个 repo 中确定更改并且找不到日志中提到的文件,因为该文件从未属于此 repo,这可能会非常令人讨厌。一种解决方案是将提交拆分到不同的存储库。

于 2013-05-16T20:54:21.957 回答
0

这对我有用:

git ls-files --stage | grep $160000

基于这篇很棒的文章:http ://www.speirs.org/blog/2009/5/11/understanding-git-submodules.html

于 2015-03-29T03:05:46.883 回答