在git中是否有任何功能来检查目录下的多个git repos?

时间:2011-09-30 01:00:05

标签: git version-control github

我在一个目录下有多个git repos,我想知道git中是否有一些功能可以迭代每个目录,检查是否有任何未提交的更改并将这些更改报告给我?

我每天早上都可以运行,以确保一切都是最新的。

只是在任何一天,我将使用多个回购,我将忘记提交我的更改,这可能会导致冲突,当我后来意识到提交它们时。

克里斯

5 个答案:

答案 0 :(得分:1)

Andy是正确的(在评论中):如果父目录本身是父仓库的根目录,所有子目录都是子目录,那么git status可以检测其中一个的任何变化。 / p>

您也可以使用(带子模块)git diff

git submodule foreach --recursive git diff --name-status

如果没有子模块,请参阅“git: Find all uncommited locals repos in a directory tree”的脚本解决方案。

答案 1 :(得分:0)

也许https://metacpan.org/module/rgit可能有所帮助:)

答案 2 :(得分:0)

将此别名添加到.gitconfig文件中,然后您可以从父目录运行git status-all以递归方式获取所有git存储库的状态。

[alias]
status-all = "!for d in `find . -name \".git\"`; do echo \"\n*** Repository: $d ***\" && git --git-dir=$d --work-tree=$d/.. status; done"

答案 3 :(得分:0)

我不认为git有这种内置,因此前段时间我创建了一个脚本来执行此操作:https://github.com/mnagel/clustergit

@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "AttributeType", propOrder = { "any" }) public class AttributeType { @XmlAnyElement protected List<Element> any; @XmlAttribute(name = "id", required = true) @XmlSchemaType(name = "anyURI") protected String id; @XmlAnyAttribute private Map<QName, String> otherAttributes = new HashMap<QName, String>(); // getter setter omitted } 允许您一次在多个存储库上运行git命令。在一个文件夹上递归运行git status特别有用。 clustergit支持clustergitgit statusgit pull等。

enter image description here

答案 4 :(得分:0)

我为此编写了一个命令行工具 gita。它可以显示所有repos的状态,包括编辑状态,与远程分支的关系等。它还可以从任何工作目录批量执行命令。

您还可以对存储库进行分组。对于您的项目结构,您可以运行

gita add -r <root>

它会自动将下级存储库添加到组中。

然后gita ll root会显示相关信息。 gita <command> root 将在根组中的 repos 上批量运行命令。您当然也可以从任何工作目录在指定的存储库上运行命令。

还有其他功能,例如设置上下文、定义自定义命令等。安装是pip3 install -U gita。您可以在 github 上找到更多信息。

enter image description here

gita ll 命令在分支名称旁边显示 3 个可能的符号,表示

  • +:分阶段更改
  • *:未暂存的更改
  • _:未跟踪的文件/文件夹

分支名称有 5 种颜色

<头>
颜色 含义
白色 本地没有远程
绿色 本地与远程相同
红色 本地与远程有分歧
紫色 本地领先于远程(适合推送)
黄色 local 落后于 remote(适合合并)