忽略对跟踪文件的更改,而不必“git add”文件

时间:2014-05-02 16:38:29

标签: git git-index

您可能希望跳过序言。


我有一个npm包,其结构如下:

lib/index.js
src/index.coffee

源文件是CoffeeScript文件。我有一个make目标,用于从源文件构建JavaScript文件。直到最近,我在每次提交中都包含了对JavaScript文件的更改,但我现在使用xyz和预先发布的脚本:

XYZ = node_modules/.bin/xyz --script scripts/prepublish

.PHONY: release-major release-minor release-patch
release-major: LEVEL = major
release-minor: LEVEL = minor
release-patch: LEVEL = patch

release-major release-minor release-patch
    @$(XYZ) --increment $(LEVEL)

预发布脚本很简单:

#!/usr/bin/env bash
set -e

rm -f   lib/index.js
make    lib/index.js
git add lib/index.js

这意味着每次我发布新版本时(例如,通过运行make release-patch), lib / index.js 将被重建并添加到发布提交中。到目前为止,一切正常。


由于发布脚本会自动更新已编译的文件,因此我不再希望每次提交时都手动更新它。问题是在运行make test后,git status会将 lib / index.js 列为已修改的跟踪文件。我想避免意外提交此文件,因此我希望阻止git status列出该文件。

我尝试的第一件事是将/lib/添加到 .gitignore 。但这不起作用,因为 lib / index.js 已被跟踪。

然后我发现了git update-index --assume-unchanged。我以lib/index.js作为参数运行此命令,git status不再列出该文件。到现在为止还挺好。现在,git add lib/index.js不再有效,因此预发布脚本将无法完成其工作。

我相信预发布脚本可以在git update-index --no-assume-unchanged lib/index.js之前运行git add,然后可以使用git update-index --assume-unchanged lib/index.js还原该位。这真的是最好的方法吗?

总结一下,在保留git add文件的能力的同时,如何忽略对被跟踪文件的更改?

1 个答案:

答案 0 :(得分:3)

只需检查git add -fgit add --force)是否能够添加文件而无需取消设置assume-unchanged位。

如果这不起作用,那么:

  

我相信预发布脚本可以在git update-index --no-assume-unchanged lib/index.js之前运行git add,然后可以使用git update-index --assume-unchanged lib/index.js还原该位。

通过这种方法,你可以做到最好。

唯一的另一种方法是git update-index --(no-)skip-worktree lib/index.jsI present here),但在您的情况下,这将是相同的。