1

gitに問題があります。最近、間違いを犯し、git add -f path / to/folderを使用してリポジトリにディレクトリを追加しました。今、私はこのフォルダを無視しようと一生懸命努力していますが、何も機能しません。これまでのところ:

git update-index --assume-unchanged path/to/folder

上記のコマンドは仕事をしましたが、chmod -R 777を使用してこのフォルダーに権限を与えると、変更はgitstatusで再び表示されます。

# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/tmp/cache/models/myapp_cake_model_default_contractsign_attachments
#   modified:   app/tmp/cache/models/myapp_cake_model_default_contractsign_list
#   modified:   app/tmp/cache/models/myapp_cake_model_default_contractsign_signatures
#   modified:   app/tmp/cache/models/myapp_cake_model_default_contractsign_users
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_dev_eng
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_dev_fre
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_dev_spa
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_eng
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_fre
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_spa
#   modified:   app/tmp/cache/persistent/myapp_cake_core_default_eng
#   modified:   app/tmp/cache/persistent/myapp_cake_core_default_fre
#   modified:   app/tmp/cache/persistent/myapp_cake_core_default_spa
#   modified:   app/tmp/cache/persistent/myapp_cake_core_file_map
#   modified:   app/tmp/cache/persistent/myapp_cake_core_method_cache
#   modified:   app/tmp/logs/error.log
#
no changes added to commit (use "git add" and/or "git commit -a")

編集:多分私は前に少し不明確でした。したがって、基本的に私のプロジェクトでは、それらのtmp/フォルダーの現在のコンテンツを追加したいのですが、変更はgitによって追跡されなくなりました。だから私はこれをしました:

$ git update-index --assume-unchanged app/tmp/
Ignoring path app/tmp/

しかし今、アプリケーションを再び機能させるには、フォルダー内のファイルに書き込み権限を与える必要があるので、次のようにしました。

sudo chmod -R 777 app/tmp/

しかし、それを実行すると、コミット用にステージングされていない変更の下に上記のログが表示されます。これらの変更を追跡したくないので、無視します。

参考までに、これが私のgitignoreにあるものです:

/app/tmp/*
4

1 に答える 1

2

あなたはそれらが何をしているのかわからないので、あなたは異なるものを混ぜ合わせたように見えます。

ファイルを「変更なし」としてマークすると、追跡されたファイルへのそれ以上の変更は無視されます。これは、あなたが望むものではありません。(注:質問は元々、OPがファイルの追跡を解除したいというものでした)

を使用git rm --cachedすると、インデックス(ステージング領域)からファイルが削除されるだけで、これからはファイルを無視することについてGitに何も通知されないため、正しい方向に進んでいましたが、完全には進みませんでした。

ファイルを削除した後(現在は再び追跡されていませんが、Gitは常に追跡されていないコンテンツについて通知します)、Gitの無視ファイルの1つにそのファイルのエントリを追加する必要があります。その後、ステータスメッセージに再度表示されることはありません。

これを行うには、このエントリを.gitignoreリポジトリのルートのファイルに追加します(まだ存在しない場合はそのファイルを作成します)。

/full/path/to/my_file_name

もちろん、それを文字通り使用するのではなく、代わりに実際のパスを使用してください。この場合、先頭のスラッシュは「ファイルシステムルート」ではなく「リポジトリのルート」を意味することに注意してください。


編集:より多くの情報を提供した後、あなたの問題はより明確になります。実際には、一部のファイルの追跡を解除する(つまり、バージョン管理から削除する)必要はありませんが、それ以上の変更は無視するだけです。

このため、「assume-unchanged」は確かに正しい方法ですが、assume-unchangedはディレクトリで再帰的に機能しません。つまり、変更を見逃したいすべてのファイルに明示的に設定する必要があります。これは、1つのコマンドで実行できます。

git update-index --assume-unchanged -- file1 file2 file3 ...

非常に多くのファイルがある場合、これはスクリプト化できますが、ファイルが15個しかないように見えるため、パスをコピーして貼り付けるよりも、スクリプトの作成に時間がかかります(ファイルは異なるディレクトリにあります)。コマンド。

于 2013-03-10T09:28:19.687 に答える