忽略对跟踪文件的更改,而不会导致无法“git add”文件

dav*_*ers 5 git git-index

您可能想跳过序言。


我有一个具有以下结构的 npm 包:

lib/index.js
src/index.coffee
Run Code Online (Sandbox Code Playgroud)

源文件是一个 CoffeeScript 文件。我有一个用于从源文件构建 JavaScript 文件的 make 目标。直到最近,我在每次提交中都包含了对 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)
Run Code Online (Sandbox Code Playgroud)

预发布脚本很简单:

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

rm -f   lib/index.js
make    lib/index.js
git add lib/index.js
Run Code Online (Sandbox Code Playgroud)

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


由于发布脚本会自动更新编译后的文件,我不再想每次提交时都手动更新它。问题是运行后make testgit statuslib/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

Von*_*onC 3

简单地检查git add -f( git 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.js我在这里介绍),但就您而言,那是相同的。