【问题标题】:Identify all commits made in a push识别推送中的所有提交
【发布时间】:2015-10-08 04:24:15
【问题描述】:

我正在配置 TeamCity 服务器,我需要知道如何识别一次推送中提交的所有文件。

例如:

  • 用户提交 1:
    • file1.c
    • file2.c
  • 用户提交 2:
    • file1.c
    • fileX.c
    • fileY.c

我需要对所有这些文件进行分组,以便为​​这个“推送”命令构建 1 个版本。有 git 命令可以做到这一点吗?

谢谢。

【问题讨论】:

  • 如果你先git fetch 然后git merge,git 将显示在该合并中更改的所有文件的列表(对于该合并中的所有提交)。这有帮助吗?
  • 您需要知道更改文件的总集合吗?或者具体来说,当有多个此类提交时,每个提交更改了哪些文件?
  • @Wolf,我需要知道更改文件的总集合。

标签: git teamcity


【解决方案1】:

您可以显示 git 日志并使用结果:

列出最后一次提交:

git log --name-status -p -1

result: 
commit d1bc9d55024e4e3e6acc087ba223bd7951b555fa
            Author: unknown <johndoe>
            Date:   Wed Oct 7 16:20:27 2015 -0300

                           task1000 commit message here...

            M           file1.c
            M           file2.c

现在,列出消息中带有“task1000”的所有提交:

git log --name-status --grep="task1000"

result:
            commit d1bc9d55024e4e3e6acc087ba223bd7951b555fa
            Author: unknown <johndoe>
            Date:   Wed Oct 7 16:20:27 2015 -0300

                           task1000 commit message here...

            M           file1.c
            M           file2.c

            commit 998a74eaa752f6c98c32ec9a412b219afb7cc891
            Author: unknown <johndoe>
            Date:   Wed Oct 7 16:19:56 2015 -0300

                           task1000 more one commit for this task..

            M           file1.c
            M           fileX.c
            M           fileY.c

现在你必须处理这个结果。

您需要监视服务器中的每个提交。

【讨论】:

    【解决方案2】:

    你可以使用

    $ git diff --name-only <your commit range>
    

    例如,

    $ git diff --name-only HEAD~3..HEAD
    config/sidekiq.yml
    deploy/before_migrate.rb
    deploy/before_restart.rb
    

    您可以在post-receive钩子(如said in the docs)中使用它,如下所示:

    #!/usr/bin/env ruby
    
    $oldrev  = ARGV[1]
    $newrev  = ARGV[2]
    
    `git diff --name-only #{$oldrev}..#{$newrev} > listing.txt`
    

    【讨论】:

    • 很遗憾我没有提交范围。
    • 你有什么信息?那是推后挂钩吗?
    • 不,它将在另一台服务器上运行,Teamcity 服务器。
    • 所以有人推送到 Teamcity 服务器,你想在那里进行后期处理,对吧?
    • Teamcity 服务器仅用于构建我的 dll。 git 服务器将位于 github 或 gitlab 之类的地方。因此,当有人推送到 github 时,teamcity 需要知道发生了什么以及提交了什么。
    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 2017-11-25
    • 1970-01-01
    • 2016-09-08
    • 2021-09-28
    • 2021-07-07
    • 2015-02-18
    • 2017-12-22
    相关资源
    最近更新 更多