gitoliteを使用してGitリポジトリを作成しました。次に、そのリポジトリの名前を変更したいと思います。
これどうやってするの?
gitoliteのreadmeには、サーバーで直接作業するべきではないと書かれています。しかし、この場合、サーバーでいくつかの作業を行う必要があると思いますよね?
回答:
gitolite basic-adminマニュアルに記載されているように:
これは似ています。にこれを行うコードはありませんgitolite
。あなたがしていることは:
サーバーにログオンしcd $REPO_BASE
(デフォルト:) cd ~/repositories
、
mv old-name.git new-name.git
gitolite-adminクローンに戻り、conf/gitolite.conf
すべての出現箇所を編集old-name
してnew-name
。に置き換えます。次に、通常どおりに追加、コミット、およびプッシュします。
これらの2つのステップの順序は重要です。それらを逆にしないでください:-)
gitolite3では3番目のステップが必要です。
gl-conf
リポジトリ内のファイルを編集し、リポジトリ名を新しい名前に変更しますそしてもちろん、すべてのユーザーは、新しいリポジトリ名を指すようにクローン構成を更新する必要があります。
gl-conf
、リポジトリ名も編集および変更する必要があります。
git remote set-url git@your.server:new-name.git
次にgit fetch
、エラーがないことを確認するためにを実行します。
rm -r new-name.git
前に実行する必要がありましたmv
。
私は特にgitoliteに精通していませんが、うまくいく可能性のある1つのアプローチは、正しい名前で完全に新しいリポジトリを作成し、コードをそのリポジトリにプッシュしてから、古いリポジトリを削除することです。
Greg Hewgillをアイデアとして使用すると、構成ファイルでリポジトリの名前を変更できる可能性があります。最初にダミーリポジトリでそれを試してみることをお勧めします。私の疑いは、古い名前が削除され、新しい名前が作成され、ローカルでオリジンを更新してからプッシュする必要があるということです。
クリーンなアプローチは、新しいリポジトリを空のリポジトリとして作成してから、次の手順を実行することです。
古いものが古いもので、新しい(空の)ものが新しいものであると仮定します。
# mkdir /tmp/1
# cd /tmp/1
# git clone OLD_REPO old
# git clone NEW_REPO new
# cd new
# git pull ../old
# git push origin master
または、OLDのリモートリポジトリを直接使用することもできます。
# mkdir /tmp/1
# cd /tmp/1
# git clone NEW_REPO new
# cd new
# git pull OLD_REPO
# git push origin master
これにより、すべての履歴が保持され、gitoliteがその内部を処理できるようになります。さらに、gitolite-adminを更新する必要がありますが、順序に制限はありません。
これも問題なくリモートで機能します。
ただし、OLDリポジトリの削除は、gitoliteの指示に従って(ローカルで)実行する必要があります。