Git submodule foreach带有选定或限制子模块列表

时间:2014-07-17 13:32:42

标签: git github version-control foreach

问题简介:

我只是想知道git是否提供了在循环时限制子模块的任何选项(例如:git submodule foreach“git pull origin master”)

我需要这样:

  git submodule foreach --limit_from="submodule_2"  --limit_to="submodule7" "git pull origin master" 

详细问题:

我正在开发一个配置了24个子模块的项目,我面临以下问题,这对整个团队的生产力产生了严重影响,

由于它是一个六人小组,而且发展很严格,我们过去常常每天拉3到4次,

  

git pull origin master&& git submodule foreach“git pull origin   主“

有时候

1. we miss to clear/reset the repository before
2. miss to commit the changes before git pull
3. miss to checkoout the correct branch in the submodules
4. may get a auto merging conflict errors

以上可能会在大部分时间内抑制git pull。

示例:让我们考虑git状态显示以下内容,

#   modified:   lib/library/submodule_repo_1 (new commits)
#   modified:   lib/library/submodule_repo_2 (new commits)
#   modified:   lib/library/submodule_repo_3 (new commits)
#   modified:   lib/library/submodule_repo_4 (new commits, modified content)
#   modified:   lib/library/submodule_repo_5 (new commits)
#   modified:   lib/library/submodule_repo_6 (new commits)
#   modified:   lib/library/submodule_repo_7 (new commits, modified content)
.
.
.
.
.
#   modified:   lib/library/submodule_repo_23 (new commits, modified content)
#   modified:   lib/library/submodule_repo_24 (new commits)

以上git状态显示: 24个子模块中submodule_repo_4submodule_repo_7submodule_repo_23都有修改。

如果我错过了清除这些更改或在git之前提交更改,

git pull将会出错。

痛苦的工作:

让我们考虑是否在submodule_repo_4submodule_repo_7而不是submodule_repo_23中提交修改,在这种情况下,git会将所有存储库更新到submodule_repo_22,它将会到达submodule_repo_23后抛出错误( Ex :本地文件更改将被合并覆盖)。

  

所以要在git重置或提交后更新submodule_repo_23,我需要   再次循环来自开头的submodule_repo_1的子模块。

我们是否可以选择限制foreach循环中的子模块,如下所示

git submodule foreach --limit_from='submodule_repo_20' --limit_to='submodule_repo_23' "git pull orign master"

2 个答案:

答案 0 :(得分:0)

除了不需要处理的子模块外,还可以。 这意味着foreach仍将进入子模块,但将跳过命令执行:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(getResources().getDimensionPixelOffset(R.dimen.dp_100), getResources().getDimensionPixelOffset(R.dimen.dp_100));

答案 1 :(得分:0)

这是基于@Eugene 的回答的更新。

根据 git submodule 的文档,子模块的路径现在似乎由 $sm_path 变量保存。

我愿意在特定路径中的每个子模块中运行一个命令,所以这就是我所做的:

git submodule foreach -q '[[ ! "$sm_path" == begins_with_this_path/* ]] || echo $name'

注意路径末尾的 *

当然,您可以将 echo $name 替换为您需要的任何内容。