7

私たちの会社では、svnからgitへの移行を実験しています。システム管理者に過度の負担をかけずに、チームにとってこれをシンプルにしたいと考えています。

各チームが持っている(Windows)ネットワークドライブ上にベアリポジトリを作成し、そこからプッシュ/プルすることで、これを行う方法を見つけました。認証はファイルアクセス許可を介して調整されるため、httpsや認証全体を設定する必要はありません。素晴らしい!(VPN経由でドライブにリモートアクセスできるため、httpsまたはgit + sshソリューションとほぼ同じくらい優れています)

さらに良いことに、ネットワーク共有はすでにバックアップされているため、無料でバックアップを取得することもできます。ただし、このバックアップは予想外に実行されます(バックアップは数時間続くため、翌営業日に続く可能性があります)。

したがって、開発者がリポジトリにプッシュしているにドライブがバックアップされている可能性があります。SVNでは、これが問題を引き起こす可能性があり、それがsvn hotcopy存在する理由です。

gitにも同じリスクがありますか?誰かがプッシュしている間に、裸のリポジトリをどこかにコピーできますか?当然のことながら、プッシュされた状態を復元できなくても大丈夫です。プッシュ先に作成されたバックアップを復元するために何らかの作業を行う必要がある場合も問題ありません(つまり、半分完了したプッシュ残差データを削除することによって)。しかし、裸のリポジトリ全体が壊れて使用できなくなった場合、それは問題です。

私はいくつかの実験を行い、問題を見つけることができませんでしたが、これは問題がないという意味ではありません。

編集:私は「正しい方法でそれを行う」という答えを受け入れました。それは私が長期的にやろうとしていることだからです。ただし、今のところ、自動バックアップが開始される約1時間前にgit clone、ベアリポジトリ全体(同じドライブ上)を簡単に解決できます。自動バックアップが使用されている場合、「実際の」リポジトリが誤ってコピーされる可能性があります。その時点では、最近複製されたコピーに問題はありません。バックアップがいつ終了するかではなく、いつ開始するかがわかっているので、それで十分です。

4

2 に答える 2

2

バックアップポリシーを変更して、Gitリポジトリ全体のバックアップを無視し、代わりにをバックアップすることをお勧めしますGit bundleGitの小さな喜びの束から:

bundleコマンドは、通常はgit pushコマンドを使用してネットワーク上でプッシュされるすべてのものをバイナリファイルにパッケージ化し、電子メールまたはスニーカーネットで転送してから、別のリポジトリにバンドル解除します。

このアプローチについては、githubリポジトリバックアップとローカルGitリポジトリのバックアップでも説明されています。

ローカルリポジトリを簡単にテストすると、次のことが、完全なリポジトリバックアップで通常必要となるすべてのものを含む単一のファイルを作成することがわかります。

$ git bundle create ../my.bundle --all

バンドルファイルからクローンを作成するのは簡単です。

$ git clone my.bundle my-repo

を使用git ls-remote my.bundleすると、すべてのタグとブランチがバンドルに含まれていることがわかります。

ただし、バンドルファイルにない可能性のあるもの(構成、フック、移植、代替など)をバックアップするには、バックアップをさらに数ステップ進めて、Gitリポジトリ(およびディレクトリの短縮)とバンドルファイル(およびリポジトリディレクトリの内容はバンドル内にあり、不要です)。バンドルにこれらのファイルが含まれていない限り、その後、バンドルをバックアップするだけで済みます。objectsrefslogsobjectsrefs

于 2012-06-22T19:42:50.253 に答える
0

バックアップ手順中に変更される可能性のある他のファイルをどのように処理しますか?

この状況をすでに処理している場合は、ここで同じアプローチを使用できます。そうしないと、git、svn、またはベアTXTのいずれかで、どこでも壊れたファイルが発生する可能性があります。

于 2012-06-22T14:30:54.803 に答える