5

プリアンブルをスキップしたい場合があります。


次の構造の npm パッケージがあります。

lib/index.js
src/index.coffee

ソース ファイルは 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)

公開前のスクリプトは簡単です。

#!/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 testlib/index.jsが変更された追跡ファイルとしてgit statusリストされることです。このファイルを誤ってコミットするのを避けたいので、.git status

最初に試したのは.gitignore/lib/への追加です。ただし、lib/index.jsは既に追跡されているため、これは機能しません。

それから私は発見しgit update-index --assume-unchangedました。このコマンドをlib/index.js引数として実行したところ、ファイルはgit status. ここまでは順調ですね。ただし、現在はgit add lib/index.js機能しなくなったため、prepublish スクリプトは機能しません。

prepublish スクリプトは の前に実行git update-index --no-assume-unchanged lib/index.jsできgit add、その後 でビットを元に戻すことができると思いますgit update-index --assume-unchanged lib/index.js。これは本当に最善のアプローチですか?

要約すると、ファイルに対する機能を保持しながら、追跡されたファイルへの変更を無視するにはどうすればよいgit addでしょうか?

4

1 に答える 1