问题简介:
我只是想知道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_4
,submodule_repo_7
和submodule_repo_23
都有修改。
git
之前提交更改, git pull
将会出错。
痛苦的工作:
让我们考虑是否在submodule_repo_4
和submodule_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"
答案 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
替换为您需要的任何内容。