我终于适应了Git,在经历了最初的陡峭学习曲线之后,我必须说这是相当不错的(我只是想念单个文件的外部组件,但这又是另一回事了)。但是,我有一个我无法解决的问题:我目前正在同时从事多个项目。它们都是相互联系的,我必须从一个跳到另一个,在这里和那里进行更改。

到目前为止一切都很好,我可以很轻松地“玩弄”它们,我可以定期进行更改,依此类推。问题是,几个小时后,我不记得我将哪些项目推送到了远程存储库。当然,我可以“cd”到每个项目的目录并发出push命令,但这很乏味。我想知道是否有一种使用bash来运行类似git find all unpushed commits in all projects in this directory的方法。该命令将从Git存储库的而不是的目录中运行,但其中包含所有项目的树。

逻辑很简单,但是实现起来似乎很复杂,这是因为,尽管根目录包含所有项目,但是实际的Git存储库可以在起始目录的任何级别上找到。例如:

  • 项目目录
  • 客户X
  • project1 (Git存储库)
  • 客户U
  • project2 (Git存储库)
  • project3
  • 某个库(Git repo )
  • 主题(Git repo )

  • 在此示例中,只有粗体目录才是Git存储库,因此检查应在其中进行。我知道该结构看起来有些困惑,但是实际上很容易处理。

    欢迎任何帮助,谢谢。

    最佳答案

    您可以使用git cherry找到未 push 的提交,因此您应该能够编写bash脚本,例如

    #!/bin/bash
    for file in `find ./ -type d -maxdepth 3` ; do
        cd $file
        git cherry -v
        cd -
    done
    
    它将找到3层子目录,但是看起来可能不太好。
    编辑
    正如Evan建议的那样,您可以使用子 shell 来避免cd-像这样回目录
    #!/bin/bash
    for file in `find ./ -type d -maxdepth 3` ; do
        (cd $file && git cherry -v)
    done
    
    您可能想在此处放置pwd命令,以查看您所在的文件/目录...

    关于Git-如何在目录中查找所有项目的所有 "unpushed"提交?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12499195/

    10-16 20:42