标签: git-submodules

如何制作顶级git来跟踪另一个子目录git下的所有文件

命令序列

mkdir topdir
mkdir another-git-directory
touch fileC
touch fileD
git add.
git commit -m"sub-dir init"
cd ..
touch fileA
touch fileB
git add.
git commit -m"top-dir init"
git ls-files
//现在我们可以看到fileC和fileD没有被顶级git跟踪//
git ls-files -o
//这不会向我们展示fileC和fileD as untracked files //

我的问题是:如何让"git ls-files -o"显示子目录中未跟踪的文件?为什么git表现得如此,因为我希望git ls-files显示所有未跟踪的文件(即使它在另一个sub-dir git中)?

我知道我可以使用"git add*/."来制作顶级git来跟踪sub-dir文件......但我很想知道上面这个问题的原因.谢谢!

目录结构

 topdir +  
        +-- .git  
        +-- fileA  
        +-- fileB  
        + another-git-directory +-- .git  
                                +-- fileC  
                                +-- fileD  
Run Code Online (Sandbox Code Playgroud)

更新(6月26日)

我发现这个线程无法跟踪Git子模块中的文件和这个url(cn)http://blog.ossxp.com/2010/01/425/,它解释了如何解决问题.

解决方案:

git rm --cached another-git-directory #no trailing slash
git add another-git-directory /. …

git git-submodules

9
推荐指数
1
解决办法
1857
查看次数

用Git移动子模块

有没有办法移动超级项目中的子模块而不先删除它们并重新添加它们?

git move git-submodules

9
推荐指数
1
解决办法
4525
查看次数

如何处理转换为Mercurial的repo上的Git子模块

开始:

$ cat .gitmodules 
[submodule "utils/external/firepython"]
    path = utils/external/firepython
    url = git://github.com/darwin/firepython.git
[submodule "utils/external/textile"]
    path = utils/external/textile
    url = git://github.com/jsamsa/python-textile.git
Run Code Online (Sandbox Code Playgroud)

虽然这仍然是一个Git回购,我需要运行git submodule init,之后会发生一些魔法.由于我现在将回购转换为Mercurial(使用hgext.git扩展名),我不知道该怎么做.是否有一个等效的过程(我需要在我的Mercurial仓库中使用这两个Git模块)?

git mercurial dvcs git-submodules mercurial-subrepos

9
推荐指数
1
解决办法
1431
查看次数

为什么hg总是提交一个git子模块,即使它没有改变?

我有一个hg存储库,带有一个hg子存储库,它有一些git子模块.(我知道这听起来很疯狂,但它正在使用谷歌代码中的svn repos,github中的libs和bitbucket中的模块.我正在使用由一群人自由提供的代码,我是谁来抱怨他们的决定版本控制 - 我想要的是代码,我很感激.

关于这种情况的一点"树":

+ hg repo
  + hg subrepo
    + git submodules
Run Code Online (Sandbox Code Playgroud)

当我更改hg子存储库中的文件并提交时,它会提交所有git子模块,即使它们没有被更改.我已经运行了hg status,它没有显示任何关于git子模块的信息,但如果我提交:

committing subrepository SUBREPO
Run Code Online (Sandbox Code Playgroud)

如果我只使用一个带有一堆git子模块的hg主回购,那就不会有问题了.当我在第一个hg存储库中进行更改时,问题依赖于:现在,当我提交时,它会在hg存储库和hg子存储库中提交,因为它总是提交git子模块.所以现在,我有一个评论,设计只在第一个hg存储库,并在hg子存储库中的相同注释.

对于我committing subrepository SUBREPO使用git子模块在hg repository/subrepository上进行的每次提交,我如何避免这种干扰?这是一个错误吗?这是一个git设计(也许git存储库总是至少改变一个"状态"文件或类似的东西,总是在拉动后改变?我没有太多的git经验...)

git version-control mercurial git-submodules

9
推荐指数
1
解决办法
589
查看次数

如何处理不同布局的Visual Studio解决方案中的Git子模块?

我们使用Visual Studio 2010(在C#中)进行开发,并在不久前从SVN迁移到GIT.现在我们尝试将我们的存储库(相当大的~~30,000个文件)拆分为许多git存储库 - 每个解决方案一个.这些解决方案共享一些项目,主要是我们在内部开发的库,并希望从所有解决方案中添加.

新的存储库具有平面布局.每个项目的一个子目录(共享项目是子模块).在大型旧仓库中,项目采用树形结构.

子模块中的外部引用会出现问题.在新的repos中,引用项目的路径可能是"...... libs\someproject",而在新布局中,正确的路径是"..\someproject".

我们已经有过一些与此有关的编辑大战,并不热衷于此.

我能想到的半生不熟的解决方案:

  • 在... csproj.user中使用"引用路径"并从版本控制中排除此文件(必须为每个开发人员重做并在每次清理后进行重做)

  • 为每种情况使用分支,并尝试教每个人应该去哪里"真正的"提交以及"环境变化"提交应该去哪里(子模块已经不是最简单的概念......)

  • 嵌入二进制文件而不是子模块(但是开发子模块的更改呢?不同的log4net版本呢?)

有谁知道一个理智的解决方案?

windows git visual-studio git-submodules

9
推荐指数
1
解决办法
7108
查看次数

添加/删除git子模块的麻烦

我正在尝试将git子模块添加到我的项目中,特别是ShareKit.我的项目是一个git repo,当我尝试输入时

git submodule add git://github.com/ShareKit/ShareKit.git Submodules/ShareKit
Run Code Online (Sandbox Code Playgroud)

进入终端我得到一个错误,说子模块已经存在.我想我刚刚在这个项目中添加了它,并最终没有使用它并且不正确地从项目目录中删除它(最有可能删除子模块文件夹).所以我尝试着做

git rm --cached Submodules/ShareKit
Run Code Online (Sandbox Code Playgroud)

根据如何删除子模块?,现在当我尝试使用第一段代码再次添加子模块时,我得到了这个:

A git directory for 'Submodules/ShareKit' is found locally with remote(s):
origin  git://github.com/ShareKit/ShareKit.git
If you want to reuse this local git directory instead of cloning again from
git://github.com/ShareKit/ShareKit.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
Run Code Online (Sandbox Code Playgroud)

而且我不确定该怎么做.我对git很新,我需要在我的项目中得到这个 - 有没有办法只是擦除项目中的所有git并从头开始?我只是用一个新项目做到这一点,但除此之外它已经非常完整,从头开始并将所有内容复制完毕将非常耗时.我让ShareKit在测试应用程序中工作,安装正确,有什么理由我不能将该文件夹中的所有ShareKit文件复制到我需要的文件夹中吗?

编辑:我试过了

git submodule deinit Submodules/ShareKit
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误:

error: …
Run Code Online (Sandbox Code Playgroud)

git git-submodules

9
推荐指数
2
解决办法
6787
查看次数

是否有Prolog的包管理器?

我想知道与其他程序员共享Prolog代码/库的最佳实践(以及多个项目之间的自己).我自己也在使用SWI-Prolog,但也对其他Prolog如何解决这个问题感兴趣.

相比之下,Java有Maven + JAR,Python有EasyInstall + PythonEggs,其他语言可能还有很多其他语言.但Prolog还有吗?

SWI-Prolog包

在SWI-Prolog中有Packs,由模块支持library(prolog_pack).这些的缺点是:

  1. 您必须为每个包创建存档文件或Git存储库.说我想创建10包.现在我需要创建10个Git存储库.我有时会编辑影响多个文件,可能驻留在多个包/ repos中,要求我为单个(多文件)编辑提交几个Git存储库.
  2. 为了创建一个包,你必须手工挑选一些"属于一起"的文件.有时候我发现文件X属于包A和包B.现在我需要在存储库A和B中维护文件X的副本,或者我需要创建另一个包C只包含X和导入C到A和B.
  3. 包在公共网站上发布.我的大部分图书馆对我来说都很有趣.其中一些对我与之合作的特定人员很有意思,只有少数人准备好进行更广泛/公开的传播.
  4. 包维护者必须指定包间依赖关系.对于复杂的图书馆等级,对我来说似乎是不必要的工作.我已经非常严格地使用Prolog模块,并且只想使用Prolog模块导入的层次结构作为依赖图.

Git子模块

另一种我直到现在使用过的方法是Git子模块.通过将一个存储库导入另一个存储库来实现库之间的依赖关系.这与SWI-Prolog包有一些相同的缺点:

  1. 每个库的Git存储库,因此需要维护大量存储库.
  2. 维护者必须明智地选择每个repo的文件,并且必须指定需要哪些Git子模块包含.
  3. 更新现有库非常困难.我发现(困难的方法)我交给代码的大多数人都无法成功更新具有许多错综复杂的相互依赖的子模块导入的Git存储库.(我非常尊重偶尔使用子模块的Git大师并且总是把它做对,但是大多数非程序员和我工作的很多程序员都觉得它太难了.)

我的理想方法

我个人对完美的Prolog代码共享方法的偏好是:

  1. 您传播的库的数量和您拥有的Git存储库的数量是独立的.具体来说,我可以有一个相当大的存储库,其中的一部分以不同的方式传播.如果有人喜欢(重新)使用我的Prolog模块和DCG帮助器谓词,那么我可以简单地向该人传播该单个文件(加上潜在的依赖关系).
  2. 您不必亲自挑选和手动复制单个文件,而是让算法遍历模块导入的层次结构以提取(显然)属于一起的文件.首次运行程序时会下载文件.这些文件可能都属于同一个Git存储库或多个存储库,算法根本不关心存储库和库之间或存储库和文件之间的映射.
  3. 代码的维护者能够决定一个库是公开发布还是发布给有限的一组人(或者只限于包括维护者在内的有限组).
  4. 文件之间的模块导入层次结构是依赖关系跟踪所需的全部内容.

以上暗示我理想的库共享方法是基于文件的,而不是基于包的.如果Prolog模块A使用Prolog模块B并且加载了A,则从本地文件(如果存在)加载B或从存储库下载B. 我不确定基于文件的方法在其他语言中有多常见.前面提到的Maven + JAR和EasyInstall + PythonEggs都是基于包的.

我对其他Prolog程序员使用和思考这个主题非常感兴趣!

module package-managers prolog swi-prolog git-submodules

9
推荐指数
1
解决办法
453
查看次数

如何更新git子模块

我刚刚git merge <merging_branch_name>在应用程序中完成了一个并解决了许多冲突.

但是当我这样做时git status,我可以在消息中看到带有(新提交)的子模块列表.看起来子模块(分支/标签)版本尚未更新.

例如:

modified:   plugins/myplugin.git (new commits)
Run Code Online (Sandbox Code Playgroud)

如何使用版本更新子模块(带<merging_branch_name>)

我在git bash中得到这样的结果

my_app (current_branch  |MERGING), 
Run Code Online (Sandbox Code Playgroud)

所以,当我这样做时git status,我得到子模块列表,如下所示

 modified:   plugins/plugin1.git (new commits)
 modified:   plugins/plugin2.git (new commits)
 modified:   plugins/plugin3.git (new commits)
 modified:   plugins/plugin4.git (new commits)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

git git-merge git-submodules

9
推荐指数
1
解决办法
6078
查看次数

如何将git仓库中的目录镜像到另一个git仓库?

我有一个目录/amp中RepoA和RepoB(与/放大器的内容填充最初).我想将/ampRepoA中的任何更改镜像 到RepoB.

可能吗 ?

PS:RepoA包含许多其他目录.我只想镜像/ amp dir.而RepoB只会有/ amp内容而不是其他内容.

git github git-submodules git-subtree

9
推荐指数
2
解决办法
1254
查看次数

cloudbuild.yaml包含不同的云构建器配置

我的项目分为gitmodules,如下所示:

/ +
  |
  +-module_1
  |  |
  |  +- cloudbuild.yaml 
  |  +- src/
  |  +-.git/
  | 
  +-module_2
  |  |
  |  +- cloudbuild.yaml 
  |  +- src/
  |  +-.git/
  | 
  +- .git/
  +- .gitmodules
  +- cloudbuild.yaml
Run Code Online (Sandbox Code Playgroud)

我正在尝试从父存储库构建子模块,但cloudbuild有一个问题,因为它不会自己获取gitmodules.因此,当我module_1/cloudbuild.yaml作为cloudbuild配置引用时,构建失败,因为该文件不存在.我正在考虑可能的解决方法,我想问下列是否可行:

  1. 引用/cloudbuild.yaml为构建配置
  2. 添加一个步骤来获取cloudbuild.yaml中的gitmodule
  3. 运行不同的cloudbuild文件

结果应该类似于:

steps:
  - name: 'gcr.io/$PROJECT_ID/git'
    args: ['submodule', 'update', '--init']
  - name: 'some kind of command that runs cloudbuild.yaml`
    args: ['module_1/cloudbuild.yaml']
Run Code Online (Sandbox Code Playgroud)

免责声明 我知道我可以将所有cloudbuild配置放在根存储库中,但我希望这些模块尽可能地自我管理

git google-app-engine git-submodules google-cloud-platform google-cloud-build

9
推荐指数
1
解决办法
572
查看次数