私のホームディレクトリには、ローカルのgitリポジトリにファイルがあります。バージョン管理下ですべてを追跡したいからです。
これらのファイルのほとんどはリモートリポジトリにプッシュしたいが、いくつかはローカルリポジトリにのみ保存したい(これらには軽微な機密情報が含まれている) 。
どうすればgitでこれを実現できますか? 「.gitignore-for-Push
」ファイルを構成できますか?ローカルの.gitignore
ファイルを使用することはできません。これらのファイルは追跡から完全に除外されるためです。
ps:私は質問 exclude file-equivalentがあります... を知っていますが、答えは.gitignore
パスを使用できません。もう1つの質問 プッシュ時に特定のファイルを除外... は、gitだけではなく、git + herokuの特定のケースのみに回答します。
これは不可能です。ファイルをコミットした場合は、それがプッシュされます。プッシュアクションは、ファイルベースではなく、コミットに対してのみ機能します。
ただし、通常のgitリポジトリをリモートマシンにプッシュしている間、機密データ用のサブモジュールを使用して、このサブモジュールをローカルマシンに保持できます。
あなたは先に進んで実際にこれらのファイルを追跡することができます(機密情報を除きます)が、次に使用します:
git update-index --assume-unchanged <file>
各ファイルに。次に、機密情報を各ファイルに追加しますが、Gitはファイルが変更されたと認識せず、その機密情報のコミット(およびプッシュ)を試みません。
Gitに情報を再度更新させるには、以下を使用します。
git update-index --no-assume-unchanged <file>
私が最終的に問題を回避した方法は次のとおりです:機密情報を独自のgitリポジトリのあるサブディレクトリに置き、ファイルを古い場所にシンボリックリンクします。
例えば。ホームフォルダー(~
)には、ファイル.creds
が存在しますnotがパブリックリポジトリに必要です。このファイルをprotected
というサブフォルダーに移動し、~
からprotected/.creds.
へのシンボリックリンクを作成します。もちろん、このフォルダーを~
リポジトリに含めないでください。 .creds
を追跡するために、フォルダprotected
にnewリポジトリを作成します。このリポジトリを一般公開しない場合は、設定されています。
私はこの解決策が一種の警戒態勢であることを知っています:私の質問はファイルが同じディレクトリにあると述べていますが、シンボリックリンクは私のために機能します。
ここでgit-update-index-作業ツリーのファイルの内容をインデックスに登録します。
git update-index --assume-unchanged <PATH_OF_THE_FILE>
例:-
git update-index --assume-unchanged somelocation/pom.xml
除外したいファイルをコミットしないでください。
たとえば、ローカルリポジトリにある2つのファイルa
とb
があるが、そのうちの1つだけをコミットしたい場合は、git add a
を使用して、ファイル。次に、git commit
でコミットします(-a
フラグは含めないでください)