2013-03-22 3 views
13

私は自分の仕事でgitに移動しています。我々は、バージョン管理(〜500MB)の下でかなり大きなリソースを持つ、かなり大きなプロジェクトを持っています。大きなプロジェクトのためにリモートブランチをプッシュするのは本当に遅いです

今日は、リモートサーバーにブランチをプッシュしようとしましたが、gitがプロジェクト全体をアップロードしようとしているように見えていました。私は変わった4-5のテキストファイルのデルタだけを送信することを期待していたでしょう(通常のプッシュをマスターするのと同じように)。リモートブランチの仕組みではありませんか?私たちはgit push origin some_branch_nameを使用しましたが、この場合にはより良いコマンドがありますか? gitに大きなリソースを格納してはいけませんか?そうでない場合、人々はこのシナリオをどのように扱いますか?ある開発者がマスターブランチへの変更をコミットしないで他の開発者と進行中の作業を共有する良い方法はありますか?現時点では、リモートブランチをプッシュするのに約15分かかりますが、実際には実行できません。私たちは何を間違っていますか?

+0

'git push origin HEAD:some_branch_name'を試しましたか? – devang

+1

同じ結果です。 1つのファイルを削除するブランチをテストしています。数分間実行すると、 'Writing objects:17%(8153/46698)、192.53 MiB | 2.46 MiB/s' – herbrandson

+1

ローカルリポジトリで 'git gc'を実行してからどれぐらいの期間が経過していますか?私は何が起こっているのか肯定的ではありません(なぜ、それがネットワークにもっと多くのデータを書き込むのかわかりませんが)、これはgit操作の膨大な処理を大幅にスピードアップしました。 – rra

答えて

1

投稿を更新することはできますか?

は、プロジェクトがどのように見えるかの良いアイデアを取得するには、次のトップ10+エントリの周りに投稿してください。大きなリソースがバイナリがある場合

git log --decorate=short --oneline --graph --all 

、その後、何の彼らはgitのに保存されていないべきではありません。これらのバイナリリソースが更新されている場合、gitは内部的に完全な複製を作成しなければなりません。圧縮アルゴリズムはそれを好まず、サーバに送信します。それらについて何をすべきかについては、シナリオに依存します。あなたは精巧にする必要があります。

複数の開発者が同じリモートで作業しているようです。これは正しいです?その場合、開発者はmasterに直接コミットする必要はありません(imhoは決して起こらないはずです)。各開発者が独自の名前付きブランチを持つことは可能です。例えば、開発者Johnは、すべてのブランチをjohn/<branch_name>の下に作成できます。これにより、ワークフローをきれいに保つのに役立ちます。

また、gitはデルタでは機能しません。変更されるたびにファイル全体が保存されます。これは非効率的に見えるかもしれませんが、使用される圧縮はサイズを最小限に抑えます。また、チェックアウトやログ履歴のスキャンをはるかに高速化するのに役立ちます。視覚化のためにGit Basicsの最初のセクションを読んでください。

+5

これは、少数のファイルだけが変更されたときにgitがなぜリポジトリ全体をプッシュしているのか(あるいは、とにかく感じているのか)は説明しません。多くのバイナリファイルがあるという事実は、プッシュをしてはいけません(それは何も変わらない)。 – grahamrhay

+0

私はこれがこのhttps://stackoverflow.com/questions/29118876/git-push-isに関連するかもしれないと思うおそらくブランチのために非常に遅い? git fetchを実行すると、高速転送用に設定されます。またはそのようなもの。 –

関連する問題