【问题标题】:How to suppress "Changes not staged for commit"?如何抑制“未上演提交的更改”?
【发布时间】:2016-03-02 18:27:37
【问题描述】:

如何在提交时抑制“更改未暂存以进行提交”输出?请注意:

  • 我知道我可以做到> /dev/null,但我希望不要压制其他事情。
  • 我不是在谈论 提交消息 -- 我是在谈论它打印到终端的内容。

【问题讨论】:

  • 您在询问显示的默认提交消息?
  • 何必呢?它只是有关已更改但未包含在提交中的文件的信息。当您从给定的已更改工作树准备一系列提交时,它很有用。
  • 看看 REPO/.git/hooks/prepare-commit-msg.sample,他们有一个例子展示了如何注释掉可以调整的“冲突”部分
  • 这令人困惑。那是什么输出?你能给我们举个例子吗?除了默认提交消息中被注释掉的那个(如果您通过编辑器输入提交消息)......我唯一能想到的另一个是git status,这是完全不同的事情?
  • @ddr2:对不起,我在尝试提交时遇到了它,但没有添加任何文件。 (这是脚本的一部分,显然不是我会手工完成的。)

标签: git commit git-commit


【解决方案1】:

在对git.git 代码库进行了一些挖掘之后,恐怕您应该设计一种方法来忽略脚本中的这些行。

在提交期间,如果你不使用--allow-empty,git 将通过that code

if (!commitable && whence != FROM_MERGE && !allow_empty &&
    !(amend && is_a_merge(current_head))) {
    s->display_comment_prefix = old_display_comment_prefix;
    run_status(stdout, index_file, prefix, 0, s);
    ...
    return 0;
}

run_status 做了以下事情:

switch (status_format) {
    case STATUS_FORMAT_SHORT:
        wt_shortstatus_print(s);
        break;
    case STATUS_FORMAT_PORCELAIN:
        wt_porcelain_print(s);
        break;
    case STATUS_FORMAT_UNSPECIFIED:
        die("BUG: finalize_deferred_config() should have been called");
        break;
    case STATUS_FORMAT_NONE:
    case STATUS_FORMAT_LONG:
        wt_status_print(s);
        break;
    }
}

STATUS_FORMAT_PORCELAIN(使用--porcelain)和STATUS_FORMAT_SHORTgit config status.short true)将产生相同的缩小输出:

 M bla.txt

STATUS_FORMAT_LONG(和STATUS_FORMAT_NONE,不知道为什么?),将产生通常的输出:

Changes not staged for commit:
    modified:   bla.txt

也就是说,我们不要绝望,这是我们正在谈论的软件,总有办法解决问题(不过我仍然需要完全测试;))

您可以使用--allow-empty 来通过该代码分支并创建一个空提交。然后,你用一个post-commit 钩子链接它,检查最新的提交是否为空,如果是,钩子运行git reset --hard HEAD~1,你可以去吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多