I am attempting to mirror all repositories on an existing Phabricator instance over to Phacility. I have a script which does:
git clone --mirror <sourceurl> folder/ cd folder/ git push --mirror --force <desturl>
where desturl is something like: ssh://redpoint-offsite@vault.phacility.com/source/migrate-177.git. We then get:
# Push received by "web.phacility.net", forwarding to cluster host. # Waiting up to 120 second(s) for a cluster write lock... # Acquired write lock immediately. # Waiting up to 120 second(s) for a cluster read lock on "repo009.phacility.net"... # Acquired read lock immediately. # Device "repo009.phacility.net" is already a cluster leader and does not need to be synchronized. # Ready to receive on cluster host "repo009.phacility.net". Counting objects: 1501, done. Delta compression using up to 8 threads. Compressing objects: 100% (555/555), done. Writing objects: 100% (1501/1501), 11.92 MiB | 2.52 MiB/s, done. Total 1501 (delta 925), reused 1501 (delta 925) remote: Resolving deltas: 100% (925/925), done. remote: [2017-02-21 04:56:03] EXCEPTION: (Exception) Unable to identify the reftype of 'refs/pull/1/head'. Rejecting push. at [<phabricator>/src/applications/diffusion/engine/DiffusionCom mitHookEngine.php:404] remote: arcanist(head=stable, ref.master=fad85844314b, ref.stable=a232e95a18f3), libcore(), phabricator(head=stable, ref.master=f844280d360c, ref.stable=3e10f69570c0), phutil(head=stable, ref.master=9128fb722671, ref.stable=d0ebdaf3ab70), services(head=stable, ref.master=b5cef1ac31ff, ref.stable=198eb67bd822) remote: #0 DiffusionCommitHookEngine::findGitRefUpdates() called at [<phabricator>/src/applications/diffusion/engine/DiffusionCommitHookEngine.php:205] remote: #1 DiffusionCommitHookEngine::findRefUpdates() called at [<phabricator>/src/applications/diffusion/engine/DiffusionCommitHookEngine.php:116] remote: #2 DiffusionCommitHookEngine::execute() called at [<phabricator>/scripts/repository/commit_hook.php:186] # Released cluster write lock. To ssh://vault.phacility.com/source/migrate-177.git ! [remote rejected] master -> master (pre-receive hook declined) ! [remote rejected] refs/pull/1/head -> refs/pull/1/head (pre-receive hook declined) ! [remote rejected] refs/pull/1/merge -> refs/pull/1/merge (pre-receive hook declined) ! [remote rejected] refs/pull/10/head -> refs/pull/10/head (pre-receive hook declined) ! [remote rejected] refs/pull/11/head -> refs/pull/11/head (pre-receive hook declined) ! [remote rejected] refs/pull/12/head -> refs/pull/12/head (pre-receive hook declined) ! [remote rejected] refs/pull/13/head -> refs/pull/13/head (pre-receive hook declined) ! [remote rejected] refs/pull/14/head -> refs/pull/14/head (pre-receive hook declined) ! [remote rejected] refs/pull/15/head -> refs/pull/15/head (pre-receive hook declined) ! [remote rejected] refs/pull/16/head -> refs/pull/16/head (pre-receive hook declined) ! [remote rejected] refs/pull/17/head -> refs/pull/17/head (pre-receive hook declined) ! [remote rejected] refs/pull/18/head -> refs/pull/18/head (pre-receive hook declined) ! [remote rejected] refs/pull/19/head -> refs/pull/19/head (pre-receive hook declined) ! [remote rejected] refs/pull/2/head -> refs/pull/2/head (pre-receive hook declined) ! [remote rejected] refs/pull/20/head -> refs/pull/20/head (pre-receive hook declined) ! [remote rejected] refs/pull/21/head -> refs/pull/21/head (pre-receive hook declined) ! [remote rejected] refs/pull/22/head -> refs/pull/22/head (pre-receive hook declined) ! [remote rejected] refs/pull/23/head -> refs/pull/23/head (pre-receive hook declined) ! [remote rejected] refs/pull/24/head -> refs/pull/24/head (pre-receive hook declined) ! [remote rejected] refs/pull/25/head -> refs/pull/25/head (pre-receive hook declined) ! [remote rejected] refs/pull/26/head -> refs/pull/26/head (pre-receive hook declined) ! [remote rejected] refs/pull/27/head -> refs/pull/27/head (pre-receive hook declined) ! [remote rejected] refs/pull/28/head -> refs/pull/28/head (pre-receive hook declined) ! [remote rejected] refs/pull/29/head -> refs/pull/29/head (pre-receive hook declined) ! [remote rejected] refs/pull/30/head -> refs/pull/30/head (pre-receive hook declined) ! [remote rejected] refs/pull/31/head -> refs/pull/31/head (pre-receive hook declined) ! [remote rejected] refs/pull/32/head -> refs/pull/32/head (pre-receive hook declined) ! [remote rejected] refs/pull/33/head -> refs/pull/33/head (pre-receive hook declined) ! [remote rejected] refs/pull/34/head -> refs/pull/34/head (pre-receive hook declined) ! [remote rejected] refs/pull/35/head -> refs/pull/35/head (pre-receive hook declined) ! [remote rejected] refs/pull/36/head -> refs/pull/36/head (pre-receive hook declined) ! [remote rejected] refs/pull/37/head -> refs/pull/37/head (pre-receive hook declined) ! [remote rejected] refs/pull/38/head -> refs/pull/38/head (pre-receive hook declined) ! [remote rejected] refs/pull/38/merge -> refs/pull/38/merge (pre-receive hook declined) ! [remote rejected] refs/pull/39/head -> refs/pull/39/head (pre-receive hook declined) ! [remote rejected] refs/pull/4/head -> refs/pull/4/head (pre-receive hook declined) ! [remote rejected] refs/pull/5/head -> refs/pull/5/head (pre-receive hook declined) ! [remote rejected] refs/pull/6/head -> refs/pull/6/head (pre-receive hook declined) ! [remote rejected] refs/pull/7/head -> refs/pull/7/head (pre-receive hook declined) ! [remote rejected] refs/pull/8/head -> refs/pull/8/head (pre-receive hook declined) ! [remote rejected] refs/pull/9/head -> refs/pull/9/head (pre-receive hook declined) ! [remote rejected] latest -> latest (pre-receive hook declined) error: failed to push some refs to 'ssh://redpoint-offsite@vault.phacility.com/source/migrate-177.git'
I'm sure I could omit the refs/pull ref tags (and instead use --all --tags). However, we intend to shut off the old Phabricator instance and I don't want to potentially lose or have to recover data from an archive. It seems reasonable to me to be able to mirror a repository from one Phabricator to another and keep all refs intact.
Reproduction Steps:
- Create an instance on Phacility
- Create a repository on Phacility
- git clone --mirror https://github.com/Protobuild/Protobuild.Manager
- cd Protobuild.Manager
- git push --mirror --force <desturl> where desturl is the URL of the repository you created on Phacility