我在一个目录下有多个git repos,我想知道git中是否有一些功能可以迭代每个目录,检查是否有任何未提交的更改并将这些更改报告给我?
我每天早上都可以运行,以确保一切都是最新的。
只是在任何一天,我将使用多个回购,我将忘记提交我的更改,这可能会导致冲突,当我后来意识到提交它们时。
克里斯
答案 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
支持clustergit
,git status
,git pull
等。
答案 4 :(得分:0)
我为此编写了一个命令行工具 gita。它可以显示所有repos的状态,包括编辑状态,与远程分支的关系等。它还可以从任何工作目录批量执行命令。
您还可以对存储库进行分组。对于您的项目结构,您可以运行
gita add -r <root>
它会自动将下级存储库添加到组中。
然后gita ll root
会显示相关信息。 gita <command> root
将在根组中的 repos 上批量运行命令。您当然也可以从任何工作目录在指定的存储库上运行命令。
还有其他功能,例如设置上下文、定义自定义命令等。安装是pip3 install -U gita
。您可以在 github 上找到更多信息。
gita ll
命令在分支名称旁边显示 3 个可能的符号,表示
+
:分阶段更改*
:未暂存的更改_
:未跟踪的文件/文件夹分支名称有 5 种颜色
颜色 | 含义 |
---|---|
白色 | 本地没有远程 |
绿色 | 本地与远程相同 |
红色 | 本地与远程有分歧 |
紫色 | 本地领先于远程(适合推送) |
黄色 | local 落后于 remote(适合合并) |