Herok にデプロイしているプロジェクトがあります。ソースコードツリーには、多数のmp3ファイルが含まれています(このWebサイトは、私が深く関わったレコーディングプロジェクト用です)。
ソースコードを GitHub に置きたいのですが、GitHubの無料アカウントには300 MBの制限があります。たくさんのmp3ファイルに50 MBの制限を使いたくありません。明らかに、それらを.gitignore
ファイルに追加して、レポジトリから除外することができます。
ただし、git Push heroku
を使用してHerokuにデプロイします。 mp3ファイルは、展開するためにHerokuにプッシュするブランチに存在する必要があります。
理想的には、ローカルマスターブランチのmp3ファイルを.gitignore
して、それをGitHubにプッシュしたときにmp3が含まれないようにします。それから、mp3が無視されるのではなくコミットされるローカルの実稼働ブランチを維持します。デプロイするには、マスターを実稼働環境にマージしてから、実稼働ブランチを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"
必要に応じて、これらのファイルをコミットしたブランチを作成しました。しかし、マスターブランチに戻ると、Foo.ignoredはなくなりました。
これを設定するためのより良い方法についての提案はありますか?
編集:明確にするために、mp3ファイルが両方のブランチに存在するようにして、サイトをローカルで(どちらかのブランチを使用して)実行したときにサイトが機能するようにします。 1つのブランチでファイルを無視するようにしたいので、GitHubにプッシュしたときにもプッシュされません。通常、.gitignoreはこの種の場合にはうまく機能します(つまり、リモートへのプッシュに含まれないファイルのローカルコピーを保持します)が、ファイルをチェックインしてブランチに切り替えてから、ファイルが無視されたブランチは、ファイルが消えます。
このソリューションは、特定のパッチが適用されたバージョンのgitでのみ機能するようです。 回避策を指す新しい回答 および 別の回答と後続のコメント を参照してください。どのバージョンが機能するかについてのヒントがあります。
パブリックgithub用とherokuデプロイ用など、さまざまなブランチでexcludesfile
を効果的に使用する方法についてのブログ投稿を書きました。
ここに迅速で汚いものがあります:
$ 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
重要なヒント:Cognition.Mindが受け入れた答えは機能しません(もう数年、現在、またはバニラバージョンのgitに対して)。コメントを参照してください。有効な回答と回避策は次の場所にあります。
https://stackoverflow.com/a/29583813/215764
別の代替回避策(私の特定の問題に取り組んでいますが、手動のスタッシュ操作またはフックの実装が必要です)はgit stash -u -a
。違いが大きい場合、これは退屈です。
そして最後に、私が現在行っている解決策は、開発環境を保持しているVMを分岐し、info/excludes
ブランチに対して適切に、問題のあるコミットされていないファイル/フォルダーをそれぞれ削除します。
これらのMP3ファイルをS3に置くことを強くお勧めします。それらをHeroku Pushの一部(したがって、Herokuスラッグの一部)にすると、dynoの起動時間が大幅に遅くなります。 HerokuはEC2を使用しているため、ファイルがS3にあり、アプリからのみアクセスされる場合(ユーザーがS3に直接リンクされていない場合)、帯域幅料金は一切支払わず、50MBを保存するだけです。
build
ブランチを除く他のすべてのブランチのproduction
フォルダーを無視するとします。本番環境でbuild
フォルダーをプッシュしたいので。
1).gitignoreにbuild
を含めないでください。これを行うと、すべてのブランチで常に無視されます。
2)ファイルexclude_from_public_viewing
を./.git/info
内に作成します(このフォルダーは既に存在します)フォルダーtouch ./.git/info/exclude_from_public_viewing
3)exclude_from_public_viewing
の内部に1行書き込みます(すべてのブランチでbuild
を無視しようとしているため)。 !build
4)既存のファイル.git/info/exclude
があります。次の行を追加する必要があります。
build
build
フォルダーを無視したいのですが、.gitignoreに追加していません。それでは、gitはどのように無視すべきかを知るのでしょうか?答えは、それをexclude
ファイルに追加し、そのファイルを条件付きでgit config
に渡すことです
5)build
ブランチのproduction
フォルダーを条件付きで無視しないようにします。それを行うには、以下を実行します
6)./.git/config
と呼ばれる既存のファイルがあり、以下を追加する必要があります-
a)excludesfile = +info/exclude
以下[core]
[core]
excludesfile = +info/exclude
b)./.git/config
の最後に新しいセクションを作成します
[branch "production"]
excludesfile = +info/exclude_from_public_viewing
解決策2
1つのスマートな代替ソリューションがあります。 production
ブランチにbuild/
フォルダーを追加し、他のすべてのブランチではそれを無視したいとします。
1)gitignore
ファイルに追加します。
2)実動ブランチで、git add
を実行しながら、build
フォルダーを強制的に追加:git add -f --all build/
あなたのブランチで.gitignoreを変えてみましたか?
ファイルがそのブランチで追跡されていない限り、現在のブランチに基づいて必要なものを無視できるはずです。
.travis.yml
に追加します:
before_deploy:
- mv misc/.gitignore .gitignore
ここで、misc
—任意のフォルダーには、別の.gitignore
が含まれます。
mv
UNIXコマンド ファイルを移動;ファイルが既に存在する場合は上書きします。
Travis CIがプロジェクトをデプロイするとき、Travis CIは deploying provider ファイルとフォルダーにプッシュしません。これはmisc/.gitignore
元の.gitignore
ではなく)を無視します。
この回答は2018年4月に関連しています。将来、この回答のデータは廃止される可能性があります。
私の 実際のプロジェクト 。
成功した展開の例 。
プロジェクトをsrcブランチから同じリポジトリのdestブランチにデプロイします。
欲しいのは、そのファイルPaletteMira.suricate-profile
:
質問の著者を正しく理解していれば、彼には同様の仕事があります。
sourcesブランチ— SashaYAML 。
.travis.yml
:の一部
before_deploy:
- mv misc/.gitignore .gitignore
deploy:
provider: pages
on:
branch: SashaYAML
keep-history: true
skip-cleanup: true
target-branch: SashaDevelop
repo: Kristinita/PaletteMira
github-token: $GITHUB_TOKEN
committer-from-gh: true
project-name: PaletteMira
verbose: true
.gitignore
:の一部
*.sublime-snippet
*.suricate-profile
misc/.gitignore
の一部
*.sublime-snippet
*.suricate-profile
はmisc/.gitignore
にありません。
PaletteMira.suricate-profile
は、このブランチにリモートではなく、ローカルに存在します。
宛先ブランチ— SashaDevelop
.gitignore
:の一部
*.sublime-snippet
*.suricate-profile
はmisc/.gitignore
にありません。
PaletteMira.suricate-profile
は、このブランチ リモート およびローカルに存在します。
Travis CIのPaletteMira GitHubリポジトリを有効化 →I 環境変数を設定$GITHUB_TOKEN
に値を設定— my GitHubトークン →私はコミットします私のsrcブランチ。
エラーがない場合は、 予想される動作 を取得する必要があります。
Githubで大容量ファイルストレージがサポートされるようになりました。詳細はこちらをご覧ください https://git-lfs.github.com/
Herokuからコミットしてプッシュできますか?
例えばオーディオを追加し、それらをgithubにプッシュしてherokuに入れ、Herokuの作業コピー上のファイルを削除します。リポジトリからオーディオを削除しますが、ディスクからは削除せずに、その変更をgithubにプッシュします。