【问题标题】:How do I check 'git status' for some sub folders?如何检查某些子文件夹的“git status”?
【发布时间】:2017-02-27 14:00:59
【问题描述】:

我们正在为我们的包管理器使用自定义版本的 composer。

我们添加到项目中的每个包实际上都是一个.git repo。
自然,父仓库会忽略这些文件夹(/Vendor/packages/),当我写 git status 时,它只显示当前仓库的状态。

有没有办法检查我的项目下的 .git 存储库的状态。
我正在寻找类似git submodule foreach status 的东西。

【问题讨论】:

    标签: git command-line package


    【解决方案1】:

    您可以使用Vendor/packages 中的find 子目录并在每个子目录上执行git status

    find Vendor/packages -type d -maxdepth 1 -print -exec sh -c '(echo {} && cd {} && git status && echo)' \;

    这是假设 Vendor/packages 下的所有文件夹本身都是 git repos。

    【讨论】:

    • 太复杂了。在下面的答案中使用单行解决方案。
    • @CodeWizard:如果供应商系统下的文件夹不是 git 子模块,只是 git repos 没有以任何方式链接到父 git repo,那么 git 子模块会工作吗?
    • 如果它不是子模块,你不能在 repo 里面有 repo。 git 将无法正常工作。
    • 这行得通,但我同意它有点复杂。谢谢。
    【解决方案2】:
    git status .
    

    将显示当前文件夹及其子文件夹的文件状态,但不会显示子模块。

    要列出子模块下的更改,您必须使用以下行:

    # use the build in submodule foreach option
    git submodule foreach --recursive git diff --name-status
    

    git submodule foreach [--recursive]
    在每个签出的子模块中评估任意 shell 命令

    如果给定--recursive,子模块将被递归遍历(即给定的shell命令也在嵌套子模块中进行评估)。

    【讨论】:

    • 对不起,如果我没有说清楚,我们没有使用 git 的子模块功能。这些包是通过 composer 下载的,但不会作为子模块添加到父 repo 中。它们只是被父 repo 忽略的文件夹。
    • 所以您忽略了要检查其状态的文件夹?如果它们被忽略,那么所有文件都不会被跟踪。您希望找到什么差异?
    • 在处理项目时,我有时会发现自己正在编辑包中的代码。我有时将我的更改移动到原始存储库,有时直接从项目存储库推送。顺便说一句,他们两个都有相同的遥控器。不过,我不确定这是否是一种好习惯。
    【解决方案3】:

    你可以试试这个

    git status directory_path
    

    git status upload/
    

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 2010-10-04
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 2016-03-10
      • 2012-07-26
      相关资源
      最近更新 更多