麻烦导入所有执行分支到git仓库
我试图从我公司的Perforce软件仓库导入一个项目到一个git仓库。 我已经成功地将单个分支合并到一个git仓库中,但是我想要做的是将整个项目和所有分支合并到一起,但是我无法正常工作。
我有我的.p4settings文件:
P4PORT=perforce-server.local:1666
P4USER=my.username
P4CLIENT=my.clientspec.name
Clientspec相当简单:
//project/... //my.clientspec.name/project/...
-//project/External/... //my.clientspec.name/project/External/...
第二行是从结帐中排除外部库二进制文件。
我使用下面的命令行来启动git-p4的导入:
git p4 clone --verbose --detect-branches --max-changes=100 //project/...@all
这会通过并检查所有分支名称等,并尝试从第一次提交开始导入(这些特定项目从changelist 771开始)
Importing from //project/...@all into project
Initialized empty Git repository in /Users/grant/Development/git_test/project/.git/
Reading pipe: git config git-p4.useclientspec
Reading pipe: git config git-p4.user
Reading pipe: git config git-p4.password
Reading pipe: git config git-p4.port
Reading pipe: git config git-p4.host
Reading pipe: git config git-p4.client
p4 -G branches
Opening pipe: p4 -G branches
p4 -G branch -o branch-1
Opening pipe: p4 -G branch -o branch-1
Reading pipe: git config --bool core.ignorecase
p4 -G branch -o branch-2
...
Opening pipe: p4 -G branch -o branch-n
p4-git branches: []
initial parents: {}
我不确定是否p4-git分支,并且最初的父母在这里应该是空的,但他们是。
最后,我们到了将要开始将更改列表导入到git中的地方,并且发生以下情况:
Getting p4 changes for //project/...
p4 changes //project/...
Reading pipe: p4 changes //project/...
p4 -G describe 771
Opening pipe: p4 -G describe 771
Importing revision 771 (1%)branch is MAIN
Importing new branch RCMerge/MAIN
p4 changes //RCMerge/MAIN/...@1,770
Reading pipe: p4 changes //RCMerge/MAIN/...@1,770
Resuming with change 771
parent determined through known branches: Branch-foo
looking for initial parent for refs/remotes/p4/project/MAIN; current parent is refs/remotes/p4/project/Branch-foo
commit into refs/remotes/p4/project/MAIN
parent refs/remotes/p4/project/Branch-foo
p4 -G -x - print
Opening pipe: p4 -G -x - print
Glue/source/.empty
fatal: Invalid ref name or SHA1 expression: refs/remotes/p4/project/Branch-foo
fast-import: dumping crash report to .git/fast_import_crash_26002
这是上面引用的文件:
fast-import crash report:
fast-import process: 26002
parent process : 26000
at Thu May 19 11:51:54 2011
fatal: Invalid ref name or SHA1 expression: refs/remotes/p4/project/Branch-foo
Most Recent Commands Before Crash
---------------------------------
checkpoint
commit refs/remotes/p4/project/MAIN
committer Some User <some.user@domain.com> 1253574589 -0800
data <<EOT
* from refs/remotes/p4/project/Branch-foo
Active Branch LRU
-----------------
active_branches = 0 cur, 5 max
pos clock name
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Inactive Branches
-----------------
refs/remotes/p4/project/MAIN:
status : dirty
tip commit : 0000000000000000000000000000000000000000
old tree : 0000000000000000000000000000000000000000
cur tree : 0000000000000000000000000000000000000000
commit clock: 0
last pack :
Marks
-----
-------------------
END OF CRASH REPORT
现在,作为新手,我不知道这意味着什么,也不知道如何解决这个问题,或者甚至可能。 有没有人遇到过类似的问题? 如果是这样,你是如何解决它的?
我终于想出了解决这个问题的办法。 事实证明,Perforce分支映射是相反的,这就是这个问题的根源。
Branch-foo从MAIN分支出来,它应该有如下的分支映射:
//project/MAIN/... //project/Branch-foo/...
然而,创建该分支的人颠倒了映射,从而导致:
//project/Branch-foo/... //project/MAIN/...
作为MAIN的这个混淆的git-p4从#771开始具有第一个变更列表,并且Branch-foo从#7652开始具有变更列表,因此它在Branch-foo中找不到任何父母并且崩溃。 将分支规格更改为上面列出的第一个固定了问题。
链接地址: http://www.djcxy.com/p/52869.html