web-dev-qa-db-ja.com

マスターへのGit強制完全同期

私の職場ではソース管理にSubversionを使用しているので、自分のブランチの利点のためにgit-svnで遊んだり、メインリポジトリに触れずに何度でもコミットしたりしています。

私のgitsvnチェックアウトはローカルであるため、バックアップとして機能するようにネットワーク共有にも複製しました。私の考えでは、デスクトップがダンプを取得した場合、まだコミットする機会がなかった変更を取得するために、少なくともネットワーク共有にリポジトリがあります。

私のワークフローは、デスクトップからの作業、変更、コミットなどです。1日の終わりに、現在のすべての変更でネットワーク共有のリポジ​​トリを更新したいと思います。 git clone repo_on_my_desktopを使用してネットワーク共有のリポジ​​トリをセットアップしてから、git pull Origin masterを使用してネットワーク共有のリポジ​​トリを更新しました。私が遭遇している問題は、メインのsvnリポジトリにコミットする前にgit rebaseを使用して複数のコミットをスキッシュしたときです。これを行うと、夜間にバックアップしようとすると、ネットワーク共有のリポジ​​トリでマージの競合が発生します。

毎晩新しいgit cloneを実行せずに、デスクトップ上のリポジトリと完全に同期する方法はありますか?

15
Jesse Vogt

2つのコメント:

1 /ネットワーク共有用に bare repo または bundle (1つのファイル、移動が簡単)のいずれかを使用することをお勧めします

2 /デスクトップリポジトリのリモートとしてnetwork_repoを追加し、そこからプッシュします(git Push --force network_repo master):作業レポにとどまります。

8
VonC

別のリポジトリからプルする場合は、リベースを実行しないでください。

ネットワーク共有の変更を上書きしてもかまわない場合は、次のようにすることができます。

git fetch Origin master
git reset --hard Origin/master

これにより、ローカルマスターがオリジンマスターにリセットされます。

警告:これはハードリセットであり、すべての変更(コミット済み*かどうか)が失われます。

ただし、実際には変更がないことを前提としています。ほとんどの場合、バックアップにすぎません。

*注:技術的に言えば、コミットされた変更は、reflogから期限切れになるまで失われませんが、すべての意図と目的のために、事実上失われます。

34
hasen