8

Gitで特定のリポジトリにプッシュするときに特定のファイル(* .ai、*。psd)を除外することは可能ですか?

私のニーズは、バージョン管理とHerokuへのデプロイの両方にGitを使用しようとすることから来ています。グラフィックアセットをデプロイに含めると、スラッグサイズが希望よりも大きくなります。ただし、メインのgithubリポジトリにすべてのプロジェクトファイルを含める必要があります。

4

3 に答える 3

12

実際の問題を解決する簡単な方法.slugignoreは、リポジトリのルートに、スラッグにパッケージ化されるべきではないファイルをリストするファイルを作成することです。

于 2010-03-20T11:02:41.753 に答える
4

Herokuにデプロイするための2番目のブランチを維持できます。このブランチには、これらのファイルは含まれていませんが、マスターからマージされます。(もちろん、マスターで.aiファイルと.psdファイルを変更したときに発生するマージの競合を解決するためのシステムを作成する必要があります)。

プッシュすると、あるリポジトリから別のリポジトリに正確なコミットが転送され、同じツリーを持たない2つのコミットは定義上異なるコミットであるという単純な理由から、具体的な質問は不可能です。

ヒント:最新バージョンのgitには、「M file1」、「DU file2」(それぞれ、変更およびマージ解除/削除)などの情報を簡単に解析できる--porcelainオプションがあります。git statusマージを試行し、予想される競合を自動的にクリーンアップするデプロイメントブランチのgit-mergeラッパーを作成できます。

git checkout deploy
if ! git merge master; then
    git rm $(git status --porcelain | awk '/^DU/ {print $NF}')
fi

$NF(代わりに印刷した理由$2は、ファイルの名前を変更すると、「DU original_name-> new_name」のようになり、作業ツリーに配置されるコピーは、original_nameではなくnew_nameになるためです。)

もちろん、状況が次の場合、スクリプトはより複雑になる可能性があります-特定の拡張機能のみを検索する(制限awkパターンに追加する)か、出力全体をperlスクリプトにキャプチャして、より凝ったロジックを簡単に実行できるようにすることもできます..。。

于 2010-03-19T17:25:05.767 に答える
3

それを行うための直接的な簡単な方法はありません。それは確かに管理可能ですが、多くの苦痛を伴います(gitはこれを行うように設計されていませんでした)。

一部のファイルをデプロイから除外する方法をHerokuに提供するように依頼すると、おそらく簡単になります。

于 2010-03-19T17:29:46.257 に答える