【问题标题】:Get the list of changed directories in last commit [duplicate]获取上次提交中更改的目录列表[重复]
【发布时间】:2020-05-10 05:38:53
【问题描述】:

我有一个要求,我想获取上次提交中更改的目录列表。例如,我的仓库中有一个代码版本,分支名称是 master。这段代码有 3 个目录,每个目录都有一个文件。

dir1/file1
dir2/file2
dir3/file3

其他一些开发人员在这个主分支上工作并进行了一些更改。变化的只是file2 和file3 的内容。此更改在一次提交中进行。我在本地提取了这个更新的代码。我想要的是列出内容更改的目录。输出应该是这样的..

dir2
dir3

【问题讨论】:

  • 不确定为什么会重复。我知道我们可以使用 dirstat 来获取更改列表并从中提取路径。我不想要那个。鉴于我没有进行任何本地更改...我想要任何用户在上次提交中更改的目录。

标签: bash git shell gitlab


【解决方案1】:

我没有单独在 git 中解决此问题的方法,但您可以使用 --name-only 选项来获取已更改文件名的列表(以及只获取它们的空格式),然后使用 dirname 来从文件中提取目录名称。由于提交可以包含对同一目录中多个文件的更改,因此您还需要uniq它们:

$ git show --format="" --name-only | xargs dirname | sort | uniq

【讨论】:

  • 这有帮助。能够在此之上构建解决方案,但有一些限制。 git diff HEAD~1 --name-only 这样就可以获取更改的文件。之后使用 uniqcut -d/ f2 特定于我的用例。这有最后一次提交的限制。如果我保留并提交,那么我可以列出其他人所做的所有更改。这当然有帮助。
【解决方案2】:

听起来您可以使用 find 列出比指定文件更晚创建或修改的文件:

find . -newer dir1/file1 -print

从包含 dir1 dir2 和 dir3 的目录运行,应列出当前目录及更低目录中的所有文件,这些文件比“dir1/file1”修改得更晚(我假设您的文件比最近被拉)。然后它将列表打印到标准输出。

man find

显示其他选项,包括 anewer 和 cnewer(比文件更新的访问时间和状态更改时间),以及 -amin -atime -cmin -ctime -mmin 和 -mtime。在您的情况下,这些可能值得一看:-)

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2015-03-19
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多