【发布时间】:2015-09-11 11:08:59
【问题描述】:
为 prepare-commit-msg git 钩子编写了一个 bash 脚本。它列出了所有存在的暂存文件,但我只想要尝试提交的暂存文件(即页面底部所需输入/输出的示例)。
我的脚本的工作是防止在尝试提交的文件不遵循特定的注释约定(即认为 java 文档)时发生提交。不仅如此,它还会编辑和自动格式化 cmets 以满足我的评论约定。需要注意这一点非常重要,因为我不能只获取提交的 SHA-1,因为该脚本需要在创建该密钥之前发生。
当我执行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.txt 和file5.txt。
有没有办法做到这一点?
编辑:绝对不是重复的。 “重复”问题的解决方案绝对不是我想要的。
【问题讨论】:
-
啊,我认为您的 git 词汇有误:文件状态可以是未跟踪、已忽略、已跟踪、暂存和最新中的一种或多种。跟踪文件只是存储库中的文件,暂存文件被暂存到所谓的
index(参见 gitglossary(7))。当您对文件进行提交时,您会同时执行两项操作:添加和提交。git commit -a也是如此,仅适用于 git 找到且未被忽略的所有文件。 -
您的第二句话是:它列出了所有跟踪的文件,但我只想要暂存的文件。这就是我的命令所做的,使用 grep。
-
@ikrabbe 当我按照您的示例执行
git reset E,然后执行git status时,它会在未跟踪的文件下列出E,然后告诉我“使用”git add...”以包括将要提交的内容)。我是否严重误解了某些内容或在翻译中丢失了某些内容? :( -
@ikrabbe,那么如果我在项目中的文件 1-5 上运行“git add”会怎样。然后我决定只做
git commit file1.txt file2.txt file3.txt。使用下面列出的命令,我会只看到列出的文件 1-3,还是会看到文件 4 和 5,因为我在它们上使用了 git add,但不一定将它们作为参数传递给 git commit?我回家后会测试。