我终于习惯了Git,在最初的陡峭学习曲线之后,我必须说它相当不错(我只是想念单个文件的外部,但那是另一个故事)。然而,我有一个问题无法解决:我目前同时在做十几个项目。它们都是相互关联的,我必须从一个跳到另一个,在这里和那里做修改。
到目前为止,一切都很好,我可以很容易地“玩弄”它们,我定期提交更改等等。问题是,几个小时后,我不记得我推到远程仓库的项目。当然,我可以“cd”到每个项目的目录并发出push命令,但这很繁琐。我想知道是否有一种方法,使用bash,运行类似 git find all unpushed commits in all projects in this directory
的命令。这样的命令将从一个目录运行,该目录不是Git仓库,但包含所有项目的树。
逻辑很简单,但实现起来却相当复杂,这也是因为,尽管根目录包含了所有的项目,但实际的Git仓库可以在起始目录的任何级别找到。例如:
- projects目录
- 客户X
*project1(Git repo) - 用户U
*project2(Git repo) - 项目3
*somelihood(Git repo)
*theme(Git repo)
在这个例子中,只有粗体的目录是Git仓库,因此检查应该在它们内部运行。我知道结构看起来有点混乱,但实际上很容易处理。
任何帮助都是受欢迎的,谢谢。
8条答案
按热度按时间mnowg1ta1#
您可以使用
git cherry
查找未推送的提交,因此您应该能够编写一个bash脚本,如字符串
它将找到3层子目录,但它可能不是很好看。
编辑
正如Evan建议的那样,您可以使用子shell来避免
cd
返回目录,如下所示型
你可能想在这里放一个
pwd
命令,看看你在哪个文件/目录中。yyhrrdl82#
你可以看一下git子模块,但我个人并不觉得它们很好用。
clustergit
允许您同时在多个仓库上运行git命令。在一个文件夹上递归运行git status特别有用。clustergit
支持git status
,git pull
,git push
等。的数据
mccptt673#
将顶层设置为git repo,并将每个项目设置为子模块。
字符串
如果项目中没有任何子模块,则不需要递归。
wb1gzix04#
你可以使用下面的一行代码,根据你的要求,你可以使用它从一个不是Git仓库的目录中搜索。这将列出有未推送提交的git仓库的绝对路径:
字符串
这是通过递归搜索.git目录来实现的,当找到时,cd到父目录,即git项目的根目录。然后运行git status和grep以获取“is ahead of”短语。如果这是真的,则执行&&之后的命令,在本例中是'pwd'命令。在这里您可以插入自己的命令(例如显示未推送的提交)。
注意:仅适用于活动分支上未推送的提交
zlwx9yxi5#
以下命令也支持带有空格的路径,并且只检查包含
.git
子目录的目录。每个repo未推送的更改数(所有分支):
字符串
每个repo的未提交文件数(暂存和未暂存):
型
注意,如果未设置upstream(-u),则
git cherry
不起作用,而上面的git log
则起作用。ctehm74n6#
将这个别名添加到
.gitconfig
文件中,然后可以从父目录运行git status-all
,以递归方式获取所有git仓库的状态。字符串
这就是this post。
niknxzdl7#
以下是针对那些使用
fish
的人的答案。基于JKirchartz的答案进行了一些调整:字符串
gcmastyq8#
Maestro开发人员实用程序有一个同步功能,可以打印所有存储库的本地状态(存储、本地更改、本地提交),并执行
git pull
字符串