SVN を Git に移行しています。プロジェクトで。
すべて順調ですが、追跡されていない (無視された) ディレクトリとファイルのアクセス許可 (ファイル モード) を保持することに問題があります。以下の処理を行います。
- SVM リポジトリのクリーンアップ (片付け、コミットされていないものなどのクリーンアップ)
- ローカル環境での svn2git (ネットワーク化された SVN からの移行 - 最新のリビジョン、それ以上のコミットはありません。これには、
authors.txt
ブランチ、タグなどの適切なマッピングと適切な追跡が含まれます) - 無視されたファイルとディレクトリの作成 (.gitignore)st - から部分的に自動化され
svn propget
、手動仕上げ (行ごと) リモートを追加してプッシュします(githubを使用していますが、ほとんど問題にはなりません)
この段階でリモートの準備が整い、すべての履歴が変換されます。ディレクトリを変更したり、ファイルを移動したり、シンボリックリンクを作成したりせずに、サーバーの展開をホットマイグレーションしたいという難しい部分があります。2 つのミラーリングされた環境が 2 つの異なるサーバー上にあるとします。1 つはベータ用で、もう 1 つは製品用です。
/var/www/depl/
dir がたとえば / であるとしましょう。問題は、すべての Web プロジェクトと同様に、追跡する必要のないディレクトリとファイルがあるということです。 他の人にとっても良いガイドになると思うので、コマンドを使用して手順を書きます。したがって、サーバー上の戦略は次のとおりです。そこに行く
cd /var/www/depl/
- 経由で別のディレクトリにバックアップし
rsync
、権限をそのまま保持します!! - すべての .svn ディレクトリを再帰的に削除します
find -type d -name .svn -exec rm -rf {} \;
- 空の git リポジトリを初期化し
git init
ます (「ベア」リポジトリを使用していないことに注意してください) - GitHub リモートを追加して「origin」と呼び、すべてのブランチもダウンロードします
git remote add -f https://github.com/ORG/REPO
- ステータスを確認する (ローカル コピーはクリーンである必要があります)
- プル(つまり、フェッチ+マージですが、実際にはマージのみです)
git pull origin master
この最後のステップは、私の権限を壊すものです。追跡したくない/追跡する必要のないファイルを覚えていますか? 現在、それらの権限が変更されているようです。それらはすべて適切に無視されますが、プル/マージを適用すると壊れます。OK、確かに問題はリモート リポジトリから、マージ経由で発生しています。それは問題ではなく、ファイルがどのようにコミットされたか (どのファイルモードで) かです。
問題は 、最後のステップで、更新を取り込むときに、すべてのファイルの現在のファイル許可を保持するように git に指示できますか? 現在のディレクトリのように、再帰的にダウンしますか? では、ローカルのアクセス許可を変更しないでください。
はい、後でコミットする差分などがあるかもしれませんが、それはパーミッションの破損ほど大きな問題ではありません。
そう?方法はありますか?サーバーはもちろん Linux を実行しています。
前もって感謝します。
乾杯!