git-p4将perforce“main”分支迁移到git分支作为子目录(git分支中的双重代码)

情况

试图将1“主”和2个分支从perforce迁移到git.在使用specs映射perforce中的分支后,我尝试了典型的迁移,导致代码目录重复问题.

问题

运行“git p4”(克隆或同步)时,分支包含主分支代码的副本,分支代码位于主服务器旁边的目录中.我希望只能看到git staging区域中的分支代码.

建立

#Perforce Repo Structure
//depot/main/branches/MAINT_01
//depot/main/branches/MAINT_02
//depot/main/branches/mobile

# perforce branch maps
# note: mobile and MAINT_02 are branched (in perforce) from MAINT_01
MAINT_02 -> //depot/main/branches/MAINT_01/... //depot/main/branches/MAINT_02/...
mobile  -> //depot/main/branches/MAINT_01/... //depot/main/branches/mobile/...

# Perforce info
Server version: P4D/LINUX26X86_64/2009.2/241896 (2010/04/10)
Client Spec: (need to exclude many branches here)
//depot/main/branches/... //buildmaster-scm01/...
-//depot/main/branches/BranchA/... //buildmaster-scm01/BranchA/...
-//depot/main/branches/BranchB/... //buildmaster-scm01/BranchB/...
-//depot/main/branches/tempBranch/... //buildmaster-scm01/tempBranch/...
-//depot/main/branches/Bar/... //buildmaster-scm01/Bar/...
-//depot/main/branches/Foo/... //buildmaster-scm01/Foo/...
-//depot/main/branches/Cheese/... //buildmaster-scm01/Cheese/...

# Git Info (Linux Box)
 /git/buildmaster/git2 302  % git --version
 git version 1.7.12.rc2

迁移尝试

这是怎么回事……

agvscm01.inq.com /git/buildmaster/git 225  % git init
Initialized empty Git repository in /git/buildmaster/git/.git/
agvscm01.inq.com /git/buildmaster/git 226  % git p4 sync --detect-branches --use-client-spec //depot/main/branches@all
Importing revision 20482 (88%)
    Importing new branch branches/MAINT_01

    Resuming with change 20482
Importing revision 21137 (96%)
    Importing new branch branches/mobile

    Resuming with change 21137
Importing revision 21396 (100%)
Updated branches: MAINT_01 MAINT_02 mobile
agvscm01.inq.com /git/buildmaster/git 227  % git checkout -b master p4/branches/MAINT_01
Checking out files: 100% (14923/14923), done.
Already on 'master'
agvscm01.inq.com /git/buildmaster/git 228  % git checkout -b rel_2 p4/branches/MAINT_02
Checking out files: 100% (15142/15142), done.
Switched to a new branch 'rel_2'
agvscm01.inq.com /git/buildmaster/git 229  % git checkout -b mobile p4/branches/mobile
Checking out files: 100% (29960/29960), done.
Switched to a new branch 'mobile'
agvscm01.inq.com /git/buildmaster/git 233  % git checkout master
Switched to branch 'master'
  agvscm01.inq.com /git/buildmaster/git2 303  % git branch -a
* master
  mobile
  rel_2
  remotes/p4/branches/MAINT_01
  remotes/p4/branches/MAINT_02
  remotes/p4/branches/mobile

结果

agvscm01.inq.com /git/buildmaster/git2 304  % git checkout mobile
Checking out files: 100% (15073/15073), done.
Switched to branch 'mobile'
agvscm01.inq.com /git/buildmaster/git2 305  % ls
MAINT_01  mobile
agvscm01.inq.com /git/buildmaster/git2 306  %

请注意,MAINT_01和移动目录具有所有正确的历史记录,但只应在此级别上看到移动设备的内容.

期望

移动分支分支不应包含MAINT_01目录. mobile是MAINT_01的一个分支.这可能是非常简单的事情,但我没有看到它.
另外,签出master只包含MAINT_01作为root. MAINT_01的内容应该是分支的根.

agvscm01.inq.com /git/buildmaster/git2_bak 307  % git checkout master
Switched to branch 'master'
agvscm01.inq.com /git/buildmaster/git2_bak 308  % ls
MAINT_01
agvscm01.inq.com /git/buildmaster/git2_bak 309  %

感谢这里的任何帮助.

最佳答案 git-p4模块中的git有一个确认的错误,当使用–use-client-spec和–detect-branches选项时,将perforce代码错误地映射到git repo.我向Git开发团队报告问题时的电子邮件回复片段…

Thank you for the detailed report. It is a bug in 1.7.12-rc2.
This series fixes it, on top of origin/master.

The crux of the matter is that files are mapped into the wrong
locations in git when both –use-client-spec and –branch-detection
are enabled.

Pete Wyckoff (5):

  • git p4 test: move client_view() function to library
  • git p4 test: add broken –use-client-spec –detect-branches tests
  • git p4: set self.branchPrefixes in initialization
  • git p4: do wildcard decoding in stripRepoPath
  • git p4: make branch detection work with –use-client-spec
 git-p4.py                     | 75 +++++++++++++++++++++++++++--------------

 t/lib-git-p4.sh               | 18 ++++++++++

 t/t9801-git-p4-branch.sh      | 77 +++++++++++++++++++++++++++++++++++++++++++

 t/t9809-git-p4-client-view.sh | 17 ----------

 4 files changed, 146 insertions(+), 41 deletions(-)

目前他们发表了1.7.12rc2.等待修复版

点赞