gpt4 book ai didi

linux - Git:如何列出所有试图提交的(暂存的)文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:56 25 4
gpt4 key购买 nike

为 prepare-commit-msg git hook 编写了一个 bash 脚本。它列出了所有存在的暂存文件,但我只想要尝试提交的暂存文件(即页面底部所需输入/输出的示例)。

我的脚本的工作是在尝试提交的文件不遵循特定注释约定(即想想 java 文档)时防止提交发生。不仅如此,它还会编辑评论并自动设置评论格式以满足我的评论惯例。请注意这一点非常重要,因为我不能只获取提交的 SHA-1,因为此脚本需要在创建该 key 之前发生。

当我执行 commit -a(即提交所有文件)时,这非常有效。但是,当我只想提交一些我暂存的文件时,我遇到了问题。

有没有一种方法可以只捕获试图提交的暂存文件,而不仅仅是每个存在的暂存文件?

例如,假设我的暂存文件如下:

file1.txt
file2.txt
file3.txt
file4.txt
file5.txt

当我执行 git commit file1.txt file2.txt file3.txt 时,我想在我的脚本中捕获 file1.txt file2.txt file3.txt.. .但不是 file4.txtfile5.txt

有什么办法吗?

编辑:绝对不是重复的。 “重复”问题的解决方案绝对不是我要的。

最佳答案

$ git status -s -uno
M E
A R

修改文件E,暂存(添加)文件R。

未暂存的文件在第二列中有操作标记(在 git reset E 之后,取消暂存文件 E):

$ git status -s -uno
M E
A R

例如,可以使用 grep -v '^ ' 删除这些。

这是我的测试目录中的完整证明:

跟踪文件

 ~/test/ed $ git ls-tree HEAD
100644 blob 96bf192a9be8d1cecc314f66bb1ef5961564e983 E
100644 blob 11470e37f3d22a2548ce5c85040a44c9581d7727 I
100644 blob 8f2f9e95d9b00595d1588ccef91495c06295f5fa O

文件系统文件(全部,如 git commit -a)

 ~/test/ed $ ls -l .
total 16
-rw-r--r-- 1 ingo ingo 140 25. Jun 05:48 E
-rw-r--r-- 1 ingo ingo 143 25. Jun 05:39 I
-rw-r--r-- 1 ingo ingo 106 25. Jun 05:29 O
-rw-r--r-- 1 ingo ingo 157 25. Jun 05:28 R

工作目录的状态:针对 HEAD 和暂存文件的更改

 ~/test/ed $ git status -s -uno
M E
A R

没有修改过的文件的输出还没有或没有更多(git reset)在索引中(又名。未暂存或未暂存)

 ~/test/ed $ git status -s -uno|grep -v '^ '
A R

只有暂存文件名,没有操作标志

 ~/test/ed $ git status -s -uno|grep -v '^ '|awk '{print $2}'
R

关于linux - Git:如何列出所有试图提交的(暂存的)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31040261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com