1. ホーム
  2. git

[解決済み] git を使用して、あるブランチにあるファイルを無視し、別のブランチにコミットさせるにはどうすればよいですか?

2022-04-22 01:35:57

質問

プロジェクトがあり、そのプロジェクトを Heroku . ソースコードツリーには、たくさんのmp3ファイルが含まれています(ウェブサイトは、私が深く関わった録音プロジェクトのためのものになります)。

そのソースコードをアップするのは ギットハブ しかし、GitHubの無料アカウントには300MBの制限があります。 しかし、GitHubの無料アカウントには300MBの制限があり、そのうちの50MBをたくさんのmp3ファイルに使いたくありません。 もちろん、これらのファイルを .gitignore ファイルに保存して、私のレポから除外することができます。

しかし、Herokuへのデプロイは git push heroku . mp3 ファイルは、Heroku にプッシュするブランチに存在していなければ、デプロイされることはありません。

理想的には、次のようにしたい。 .gitignore をローカルの master ブランチに置いておくと、それを GitHub にプッシュするときに mp3 ファイルが含まれないようにすることができます。 そしてローカルの本番用ブランチには、mp3を無視するのではなくコミットしておきます。 デプロイするには、master を production にマージし、production ブランチを Heroku にプッシュします。

うまく動作させることができないのですが。

以下は、私がやろうとしていることの例です...。

$ git init git-ignore-test
$ cd git-ignore-test
$ echo "*.ignored" >> .gitignore
$ git add .gitignore && git commit -m "Ignore .ignored files"
$ touch Foo.ignored

この時点で、Foo.ignored は私の master ブランチでは無視されていますが、まだ存在しているので、私のプロジェクトはそれを使うことができます。

$ git checkout -b unignored
$ cat /dev/null > .gitignore
$ git add Foo.ignored .gitignore && git commit -m "Unignore .ignored files"

これで、これらのファイルがコミットされたブランチが、私の望むとおりになりました。 しかし、masterブランチに戻ると、Foo.ignoredが消えています。

どなたか、より良い設定方法をご存じですか?

編集:明確にするために、私はmp3ファイルを両方のブランチに存在させ、ローカルでサイトを実行したときに(どちらかのブランチを使用して)サイトが動作するようにしたいです。 一方のブランチではファイルを無視させたいので、GitHub にプッシュするときに同様にプッシュされないようにしたいのです。 通常、.gitignore はこのような場合にうまく機能します (リモートへのプッシュに含めないファイルのローカルコピーを保持するなど)。しかし、ファイルをチェックインしたブランチに切り替え、その後ファイルを無視したブランチに戻ると、ファイルが消えてしまいます。

どうしたらいいですか?

<ブロッククオート

この解決策は、パッチが適用された特定のバージョンのgitにのみ有効なようです。以下を参照してください。 回避策を示す新しい回答 別の回答およびそれに続くコメント をご覧ください。

を効果的に使う方法をブログで書きました。 excludesfile を、github公開用とherokuデプロイ用というように、異なるブランチで使用します。

ざっとこんな感じです。

$ git branch public_viewing
$ cd .git/
$ touch info/exclude_from_public_viewing
$ echo "path/to/secret/file" > info/exclude_from_public_viewing 

そして、.git/config ファイルに以下の行を追加します。

[core]
excludesfile = +info/exclude


[branch "public_viewing"]
excludesfile = +info/exclude_from_public_viewing

これで、グローバルに無視されるものはすべて info/exclude ファイルに、ブランチ固有のものは info/exclude_from_public_viewing

お役に立てれば幸いです。

http://cogniton-mind.tumblr.com/post/1423976659/howto-gitignore-for-different-branches