36

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

これらのファイルのほとんどはリモート リポジトリにプッシュしたいと考えていますが、一部はローカル リポジトリのみに保持したいと考えています(機密情報が含まれているため)。

どうすればgitでこれを達成できますか? .gitignore-for-push" " ファイルを構成できますか? これらのファイルは追跡対象から完全に除外されるため、ローカル.gitignoreファイルは使用できません。

ps: Is there an exclude file-equivalent... という質問を認識していますが、答えは.gitignore使用できないパスをたどります。もう 1 つの質問Exclude specific files when push...は、git だけではなく、git+heroku の特定のケースにのみ回答します。

4

7 に答える 7

41

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

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

各ファイルで。その後、先に進んで機密情報を各ファイルに追加できますが、Git はファイルが変更されたことを認識せず、その機密情報をコミット (したがってプッシュ) しようとしません。

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

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

于 2012-08-10T05:06:00.627 に答える
14

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

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

于 2012-08-10T05:03:47.137 に答える
7

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

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

私はこの解決策が一種の警官であることを知っています:私の質問はファイルが同じディレクトリにあると述べていますが、シンボリックリンクは私にとってはうまくいきます。

于 2012-08-18T15:01:03.963 に答える
0

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

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

于 2012-08-10T05:04:36.010 に答える
0

git update-index --skip-worktree directory/fileName.js

これにより、インデックスまたはディレクトリ キャッシュが変更されます。言及された各ファイルはインデックスに更新され、マージされていない状態または更新が必要な状態はクリアされます。詳細については、次の URL を参照してください。https://git-scm.com/docs/git-update-index

于 2020-12-24T07:40:33.060 に答える