gpt4 book ai didi

git - 忽略对跟踪文件的更改,而不会使文件无法 `git add`

转载 作者:太空狗 更新时间:2023-10-29 13:40:57 24 4
gpt4 key购买 nike

您可能想跳过序言。


我有一个具有以下结构的 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 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 add 之前运行 git update-index --no-assume-unchanged lib/index.js,然后可以恢复该位使用 git update-index --assume-unchanged lib/index.js。这真的是最好的方法吗?

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

最佳答案

简单地检查 git add -f (git add --force) 是否能够添加文件而不需要取消设置 assume-不变位。

如果还是不行,那么:

I believe the prepublish script could run git update-index --no-assume-unchanged lib/index.js before git add, and could then revert the bit with git update-index --assume-unchanged lib/index.js.

使用这种方法,您可以做到最好。

唯一的其他方法是 git update-index --(no-)skip-worktree lib/index.js (即 I present here ),但在您的情况下,这将是相同的.

关于git - 忽略对跟踪文件的更改,而不会使文件无法 `git add`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23433005/

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