2016-05-13 10 views
4

GIT: How to keep ignored files when switching branches?の重複のように思えますが、そこに私の答えが見つかりませんでした。Git:ブランチを切り替えるときに無視されたファイルを残す

私はコミット履歴を削除するために、--orphanフラグを持つ新しいブランチを作成しました。その後、すべてのファイルに対してgit rm --cachedを実行し、その一部を無視するように.gitignoreを変更し、追加してコミットしました。期待どおり、無視されたファイルは新しいリポジトリにも(その履歴にも)含まれません。しかし、ブランチを切り替えると(ブランチをチェックアウトした後、ブランチをもう一度チェックアウトすると)ブランチが消えます。どうすればそれを避けることができますか?

EDIT:GitHubに公開されるプロジェクトを準備することを目的としていたので、パスワードや鍵などの個人情報を含む設定ファイルを隠したかったのです。新しい孤立したブランチを作成します。おそらく、ファイルを.gitignoreに追加する前にファイルをコミットすると、消えている問題は解決されますが、最終的には公開履歴にファイルが表示されることになります。私はgit add -f、次にgit rm --cachedをやろうとしましたが、そのトリックはしません。

+0

これらの無視されたファイルの性質は何ですか?彼らはローカルの設定ファイルですか?これらのファイルは他のブランチでバージョン管理されていますか? –

+0

@TimBiegeleisen私は質問の詳細を追加しました。はい、ファイルは他のブランチでバージョン管理されています。私はそれらを公開することを意図した新しいブランチのgitignoreファイルに入れます。 – splinter123

答えて

3

しかし、ブランチを切り替えると(つまり、古いブランチをチェックアウトしてから、もう一度ブランチをチェックアウトすると)ブランチが消えます。どうすればそれを避けることができますか?

できません。これは設計によるものです。 publishブランチでは、ファイルが追跡されておらず、.gitignoreがあります。すばらしいです!しかし、にあるのファイルに追跡された他のブランチに切り替えると、作業ディレクトリにチェックアウトされます。これは、.gitignoreが追跡されていないファイルにのみ適用されるためです。

the documentationから:

gitignoreファイルが意図的にGitは無視すべき人跡未踏のファイルを指定します。既にGitによって追跡されているファイルは影響を受けません。

ここで、publishブランチに切り替えると、ファイルはそのブランチに存在しないため、オンディスクで削除されます。これらのファイルの.gitignoreは、追跡され、適用されないため無視されます。

から切り離されているブランチに入っていても、定義されているのは、定義によると、です。これはほとんどの実装の詳細であり、直感的ではないことが認められています。

あなたがしたいことは、すべてのブランチでこれらのファイルをすべて削除することです。BFG Repo Cleanerのようなツールを使用して、これらのファイルをすべてのブランチで履歴から削除してください。その後、あなたは安全に.gitignore、それらが消えたら完全にをGitHubにプッシュすることができます。

+0

ダウンリスト:自分自身を明らかにする。 –

+0

それは私だったし、この答えの間違いのためにダウンボートはあまりにも過酷だった。 – jthill

+0

@jthillどのような間違いですか? –

関連する問題