$ cd /cygdrive/c/git/ $ mkdir <リポジトリ名>.git $ git init --bare --sharedで作ったGitのリポジトリをいろいろいじった後で、
主たる管理を別のGitサーバに任せようと
$ git clone --mirror /cygdrive/c/git/<リポジトリ名>.git $ cd <リポジトリ名>.git $ git push --mirror ssh://<Gitサーバ>/home/git/<リポジトリ名>.gitのようにコピーし、いざCygwin上で
$ git clone ssh://<Gitサーバ>/home/git/<リポジトリ名>.gitで取ってこようとすると
Cloning into '<リポジトリ名>'... Enter passphrase for key '***************': remote: Counting objects: ***, done. remote: Compressing objects: 100% (***/***), done. fetch-pack: unexpected disconnect while reading sideband packet fatal: early EOF fatal: fetch-pack: invalid index-pack outputとか言われてエラーとなりました。
で、ネットを頼りにcloneの前に
$ export GIT_TRACE_PACKET=1 $ export GIT_TRACE=1 $ export GIT_CURL_VERBOSE=1 $ git config --global http.postBuffer 157286400 $ git config --global http.postBuffer 524288000 $ git config --global core.compression 0などとおまじないを唱えてみたもののダメ。
Cygwin上の"<リポジトリ名>.git"ディレクトリを
丸ごとGitサーバにコピーしてもダメ。
ところが、他のLinux PCからのCloneは問題なく成功。
なんじゃこりゃ!?
で、Cygwinのgitをバージョンを"2.39.0-1"から"2.38.1-1"に
落としたりいろいろやった挙句に気づいたのが、何度もcloneしてると時々成功し、
一度cloneに成功してしまえば後は特に問題がなさそうな事。
気持ちは悪いが、まあもういいやという感じで。
ところで今回調べていてリポジトリのコピー方法がいろいろあることを知りました。
$ git clone /cygdrive/c/git/<リポジトリ名>.git $ cd <リポジトリ名> $ git bundle create <生成するバンドルのファイル名> HEAD masterで作成したバンドルファイルを別のPCに持って行って空のリポジトリに対し
$ git clone <バンドルファイル> <リポジトリ名>するのは、ネットワーク的に接続されていない複数拠点間で
リポジトリの修正差分を共有したりするのに応用できるようです。
またgitのremoteコマンドを使うと複数のリポジトリの同時参照も可能です。
例えばローカルのリポジトリをリモートのリポジトリにコピーするのは
$ git clone /cygdrive/c/git/<リポジトリ名>.git $ cd <リポジトリ名> $ git remote -v $ git remote set-url origin ssh://<ユーザ名>@<gitサーバ>/home/git/<リポジトリ名>.git $ git remote -v $ git pushのような感じで可能です。
MicrosoftのクラウドサービスAzureのPaaSに
ウェブコンテンツをデプロイする際には
このテクニックを利用したりするみたいです。
それにしてもgitってすごい多機能で関心させられます。
Linus TorvaldsはこれをLinuxカーネルの開発のために
ちょちょいと作ったという話ですが、実装はともかく、
これらの仕様を丸っと最初から組み込んでいたのなら、
本当に先見の明があったのでしょうね。
まあ開発現場での問題点を愚直に解決していって
こうなっただけなのかもしれませんが。
0 件のコメント:
コメントを投稿