Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忽略对跟踪文件的更改,而不使文件无法“git add”_Git_Git Index - Fatal编程技术网

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

忽略对跟踪文件的更改,而不使文件无法“git add”,git,git-index,Git,Git Index,你可以跳过序言 我有一个npm包,其结构如下: lib/index.js src/index.coffee 源文件是一个CoffeeScript文件。我有一个从源文件构建JavaScript文件的make目标。直到最近,我在每次提交中都包含了对JavaScript文件的更改,但现在我使用了一个预发布脚本: XYZ = node_modules/.bin/xyz --script scripts/prepublish .PHONY: release-major release-minor r

你可以跳过序言


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

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

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
这意味着每当我发布新版本时(例如,通过运行
makereleasepatch
),将重建lib/index.js,并将其添加到发布提交中。在这之前一切都很顺利


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

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

然后我发现了
git更新索引——假设未更改
。我以
lib/index.js
作为参数运行此命令,文件不再按
git status
列出。到目前为止,一切顺利。但是现在,
git add lib/index.js
不再工作,因此预发布脚本将无法完成其工作

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


总之,如何在保留
git添加
文件的能力的同时忽略对跟踪文件的更改?

只需检查
git添加-f
git添加--force
)是否能够添加文件,而无需取消设置
假定未更改

如果这不起作用,那么:

我相信预发布脚本可以在
git add
之前运行
git update index--no假定lib/index.js保持不变
,然后可以使用
git update index--假定lib/index.js保持不变
还原位

使用这种方法,这是您所能做的最好的


唯一的另一种方法是
git update index--(no-)跳过worktree lib/index.js
(that),但在您的情况下,这是相同的。

谢谢,@VonC<不幸的是,code>git add-f lib/index.js
没有效果。如果我在
假设未更改
方面遇到问题,我将查看
跳过工作树
是否是一个更好的选择。我不清楚这两种方法有何不同(即使阅读了对报告的回复)。