簡體   English   中英

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

[英]Ignore changes to a tracked file without making it impossible to `git add` the file

您可能想跳過序言。


我有一個npm包,具有以下結構:

lib/index.js
src/index.coffee

源文件是CoffeeScript文件。 我有一個make目標,用於從源文件構建JavaScript文件。 直到最近,我在每次提交中都包含了對JavaScript文件的更改,但現在我將xyz與preublish腳本一起使用:

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 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不再起作用,因此預發布腳本將無法完成其工作。

我相信preublish腳本可以在git add之前運行git update-index --no-assume-unchanged lib/index.js ,然后可以使用git update-index --assume-unchanged lib/index.js恢復該位。 這真的是最好的方法嗎?

總結一下,如何在保留git add文件的能力的同時忽略對被跟蹤文件的更改?

只需檢查git add -fgit add --force )是否能夠添加文件而無需取消設置assume-unchanged位。

如果這不起作用,那么:

我相信preublish腳本可以在git add之前運行git update-index --no-assume-unchanged lib/index.js ,然后可以使用git update-index --assume-unchanged lib/index.js恢復該位。

通過這種方法,您可以做到最好。

唯一的另一種方法是git update-index --(no-)skip-worktree lib/index.js我在這里提到),但在你的情況下,這將是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM