- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我的任务是将我的团队和源代码从 git 迁移到 Perforce,我正在寻找有关如何将 git 历史迁移到 p4 的想法。
我很乐意只移动 master 分支。然而,即使这样也被证明是有问题的。
我正在使用出色的 git-p4 工具。我在我的 p4 工作区中创建了一个目标区域,并使用 git p4 clone//depot/StuffFromGit
开始在 git-p4 中跟踪它。我将所有 git 存储库的更改移植到 git-p4 克隆中。然后我可以 git p4 submit
完成,所有更改都推送到 p4。
当 git 历史看起来像这样,漂亮且线性时,它工作得很好:
A---B---C---D
问题来自多人参与该项目。即使他们在 master 上工作,仍然会创建拆分和 merge 的分支。不过,git-p4 勇敢地处理了这个问题:
A---B---C---E
\--D--/
git p4 遍历 OK,按顺序提交 ABCDE(或者 ABDCE,任何一个人的历史在前)。
例如,当 C 和 D 都更改同一个文件,而 E 是一个真正诚实到善良的 merge 时,问题就来了。 git p4 rebase
在这里失败;它会倒回提交,但在回放期间它会先应用 C,然后尝试 D 并找到冲突。然后它会停止,要求我 merge 。好吧,E 包含 merge ,但它要求我手动 merge ! 'git p4 submit' 将以类似的方式失败,只是现在是 p4 拒绝 merge 前的更改。
Using index info to reconstruct a base tree...Falling back to patching base and 3-way merge...Auto-merging main.cppCONFLICT (content): Merge conflict in main.cppFailed to merge in the changes.Patch failed at 0005 Changing main
所以现在我卡住了。有没有办法清理 git 历史或让 git-p4 理解它?令人沮丧的是, merge 就在那里。
我的想法:
没有一个是真正伟大的。关于如何使用 git 'gt p4 rebase' 或 'git p4 submit' 的任何想法?
最佳答案
“扔掉旧历史”选项并不像听起来那么糟糕:您可以将 git 存储库永远保留在它旁边,以防有人需要挖掘旧东西。不幸的是,没有办法在像 svn 和 p4 这样的老式线性系统中表示 git 的复杂历史 View 。
回顾旧历史的主要原因是“git annotate”之类的东西(我假设 p4 有类似的工具)。如果这就是您想要的,那么也许您真正想要做的是将所有 merge 提交压缩到它们的父项中(因此它们看起来像是单个提交而不是 merge )。这更像是 svn 和 p4 在他们自己的历史模型中记录的内容,其中 merge 看起来就像线性流中的单个提交。你可能可以用 git-filter-branch 或类似的东西来做到这一点。当然,这会丢失发生在子分支机构上的所有历史记录……但是 p4 用户习惯于没有这些信息。
关于git - 从 git 迁移到 Perforce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3946297/
我想要命令检查我是否已经登录 perforce,如果我登录则返回 0,否则返回一些非零值来表示错误。如何从命令行实现这一点? 最佳答案 p4 help login说: p4 login [-a -p]
我有几个类似的基于代码分支的顶部和 perforce 的同一个工作区的待定更改列表。我需要区分它们并(最终)将它们合并到一个更改列表中。最快和最简单的方法是什么?我宁愿避免创建一个临时分支。 最佳答案
我知道 //depot/foo/... 将映射 //depot/foo/ 下的所有文件和文件夹。那么,//depot/foo/* 有什么作用呢?我被告知不要使用它,并想了解原因。 最佳答案 ... 递
假设,我有两个变更列表 A 和 B(位于 A 之上)。 现在,我只想要在 B 中完成的更改,而不是包含在 A 中的更改,即 B-A 有可能这样做吗? 最佳答案 是的。做: p4 undo @A,A p
当我在我的 perforce 工作区中运行 p4 info 时,它会向我显示我的工作区的一些 perforce 客户端信息。但我想看看它到底是从哪里获取这些信息的。我尝试用谷歌搜索它,但到处都只讲述该
我需要使用带有更改列表的文件规范来运行一些 p4 命令,但我不想在子文件夹中包含文件。通常语法是: //depot/projectA/...@1234 但是,这包括所有子文件夹。如何将结果限制为仅适用
两个文件最终出现在我的 Perforce Depot 中,内容不同,但只有名称的大小写不同: //depot/path/to/file/readme.txt //depot/path/to/file/
是的,我工作的公司仍在使用 perforce。工作区是本地的一组文件。但是 p4 client 和 workspace pls 之间的关系是什么? 最佳答案 它们本质上是同义词。 “客户端”通常是“客
是的,我工作的公司仍在使用 perforce。工作区是本地的一组文件。但是 p4 client 和 workspace pls 之间的关系是什么? 最佳答案 它们本质上是同义词。 “客户端”通常是“客
有时我会“标记为添加”并将文件添加到 Perforce,但实际上我并不希望 Perforce 担心。 有没有办法恢复它,使其在 P4V 中显示为“未跟踪”项目? 看我的例子: 我错误地添加了 mil.
我在 Windows 上的同一目录中有两个 perforce 工作区根目录。例如: C:\Perforce_windows_workspaces\wkspc1 C:\Perforce_windows_
当我运行 p4 files ... 和 p4 dirs ... 时,所有返回值都具有相对于 depot 根文件夹的路径。是否有与返回实际工作区路径的 files 和 dirs 具有相同功能的命令? 最
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
我有一个很大的 Perforce depot,我相信我的客户端目前有大约 2GB 的文件与服务器同步,但是验证我的文件是否完整、同步和最新到给定更改级别的最佳方法是什么(这可能比目前客户端上的少数文件
假设我在 //depot/MyProject 下有一个项目.在变更列表 1001 中,这个项目在方向上发生了重大变化,改变了它的一切。在 2001 年的变更列表中,它得到了 p4 delete d.该
如果我将代码库 checkin perforce,排除目录的正确方法是什么?我注意到从工作区中删除文件夹会将其从库中排除,但这是正确的方法吗? 谢谢 最佳答案 如果您要排除的目录根本不应该受版本控制,
我想获取我当前客户端规范的仓库中的最新更改列表。如果我做了 p4 sync,这将有效地同步到更改。在我的工作区。 我试着做 p4 changes -s submitted -m1 -c [client
我正在使用“我的”Perforce 分支,修复代码中的一些小问题。我时不时地与另一个分支(“main”)集成。 每次提交到“我的”分支时,我都会编写大量的更改列表描述。当我集成时,我希望合并(“my-
使用 perforce,用户可以通过在 Reviews 中指定特定文件或目录的更改来获取电子邮件通知。用户记录的字段(在 Perforce documentation 中有更多详细信息)。 但是,我希
P4 一直想要提交一些磁盘上不存在的文件: open for read: : The system cannot find the path specified. 知道如何让 P4 忘记它们吗? 最佳
我是一名优秀的程序员,十分优秀!