web-dev-qa-db-ja.com

git-`git Push`からファイルを除外することは可能ですが、それらをローカルリポジトリに保持しますか?

私のホームディレクトリには、ローカルのgitリポジトリにファイルがあります。バージョン管理下ですべてを追跡したいからです。

これらのファイルのほとんどはリモートリポジトリにプッシュしたいが、いくつかはローカルリポジトリにのみ保存した​​い(これらには軽微な機密情報が含まれている) 。

どうすればgitでこれを実現できますか? 「.gitignore-for-Push」ファイルを構成できますか?ローカルの.gitignoreファイルを使用することはできません。これらのファイルは追跡から完全に除外されるためです。

ps:私は質問 exclude file-equivalentがあります... を知っていますが、答えは.gitignoreパスを使用できません。もう1つの質問 プッシュ時に特定のファイルを除外... は、gitだけではなく、git + herokuの特定のケースのみに回答します。

31
halloleo

これは不可能です。ファイルをコミットした場合は、それがプッシュされます。プッシュアクションは、ファイルベースではなく、コミットに対してのみ機能します。

ただし、通常のgitリポジトリをリモートマシンにプッシュしている間、機密データ用のサブモジュールを使用して、このサブモジュールをローカルマシンに保持できます。

13
dunni

あなたは先に進んで実際にこれらのファイルを追跡することができます(機密情報を除きます)が、次に使用します:

git update-index --assume-unchanged <file>

各ファイルに。次に、機密情報を各ファイルに追加しますが、Gitはファイルが変更されたと認識せず、その機密情報のコミット(およびプッシュ)を試みません。

Gitに情報を再度更新させるには、以下を使用します。

git update-index --no-assume-unchanged <file>

31
redhotvengeance

私が最終的に問題を回避した方法は次のとおりです:機密情報を独自のgitリポジトリのあるサブディレクトリに置き、ファイルを古い場所にシンボリックリンクします。

例えば。ホームフォルダー(~)には、ファイル.credsが存在しますnotがパブリックリポジトリに必要です。このファイルをprotectedというサブフォルダーに移動し、~からprotected/.creds.へのシンボリックリンクを作成します。もちろん、このフォルダーを~リポジトリに含めないでください。 .credsを追跡するために、フォルダprotectednewリポジトリを作成します。このリポジトリを一般公開しない場合は、設定されています。

私はこの解決策が一種の警戒態勢であることを知っています:私の質問はファイルが同じディレクトリにあると述べていますが、シンボリックリンクは私のために機能します。

6
halloleo

ここでgit-update-index-作業ツリーのファイルの内容をインデックスに登録します。

git update-index --assume-unchanged <PATH_OF_THE_FILE>

例:-

git update-index --assume-unchanged somelocation/pom.xml

詳細はこちら

3

除外したいファイルをコミットしないでください。

たとえば、ローカルリポジトリにある2つのファイルabがあるが、そのうちの1つだけをコミットしたい場合は、git add aを使用して、ファイル。次に、git commitでコミットします(-aフラグは含めないでください)

0
zjagannatha