Git repo 规划问题

标签 git centos perforce git-p4

在工作中,开发使用 perforce 来处理代码共享。我不会说“版本控制”,因为在它们准备好进行回归测试之前,我们不允许 checkin 更改。为了让我的个人变更集处于修订控制之下,我获准构建自己的 git 并将 perforce depot 的客户端 View 初始化为 git repo。

然而,这样做有一些困难。

  1. 客户端 View 位于 ~ 的子文件夹中, ( ~/p4 ), 我想把 ~也在修订控制下,有自己独立的历史。我不知道如何保留 ~ 的历史记录与 ~/p4 分开不使用子模块。子模块的问题是看起来我必须去创建一个将成为子模块的存储库,然后 git submodule add <repo> <path> .但是除了 ~ 之外,没有地方可以创建子模块的存储库。 .似乎没有安全的地方可以使用 git p4 clone 创建软件仓库的初始客户端 View 。

    (我正在假设不支持将 repo 启动或克隆到 git repo 的子目录中。至少,我找不到关于嵌套 git repos 的任何权威。)

    编辑: 只是忽略了 ~/p4在以 ~ 为根的 repo 协议(protocol)中足以让我在 ~/p4 中初始化一个嵌套的 repo 协议(protocol)?当我访问 git 存储库的一个被忽略的子目录时,我的 __git_ps1 函数仍然认为我在 git 存储库中,所以我倾向于认为不是。

  2. 我需要将 git p4 sync 创建的“远程”存储库作为 ~/p4 中的一个分支。我们需要将所有代码保存在 ~/p4 中,以免备份。我可以从实际上是本地分支的“远程”分支中 pull 数据吗?

  3. 这个只是为了方便,但我想我可以通过问它来学习一些东西。对于项目的 99%,我只想以 p4 head 修订作为初始提交对象开始。对于另外 1%,我想吸取整个 p4 历史记录,以便我可以在 git 中浏览它。 IOW,在我完成初始化之后,remotes/p4/master 分支的初始提交将包含:

    revision 1 of //depot/prod/Foo/Bar/*
    revision X of other files in //depot/prod/*, where X is the head revision
    

    remotes/p4/master分支包含 Y 次提交,其中 Y 是在 //depot/prod/Foo/Bar/* 中有文件的更改列表的数量,历史记录中的每个提交对应于其中一个 p4 更改列表,并且 HEAD 看起来像 p4 的头部。

编辑:meagar 的回答对我来说不太适用。

我已经初始化了 ~ 并 checkin 了一些提交。我忽略了 ~/p4 并且 ~/p4 不在任何提交对象中。=:

[~@ernie02] (master) $ git show HEAD:p4
fatal: Path 'p4' exists on disk, but not in 'HEAD'.

然后我去了 ~/p4/prod,这是一个我想查看的分支。但是这个 repo 坏了:

[~/p4/prod@ernie02] (master) $ git log
(shows the log for the repo rooted at ~)
[~/p4/prod@ernie02] (master) $ git init
Initialized empty Git repository in ~/p4/prod/.git/
[~/p4/prod@ernie02] (master) $ git log
fatal: bad default revision 'HEAD'

编辑编辑:糟糕,我忘了向 ~/p4/prod 提交一些东西.我现在正在尝试 git p4 sync//depot/prod ...

最佳答案

在回答 #1 时,如果你真的想将整个主目录放在一个 git 存储库中,但将 ~/p4 放在一个单独的存储库中,只需将“p4”添加到 .git_ignore 中你的主目录,并在 p4 中创建另一个 repo:

$ cd ~
$ git init
$ echo "p4" > .git_ignore
$ git add .git_ignore
# add all files/directories except p4
$ git commit
$ cd p4
$ git init
$ git add .
$ git commit

我不太了解 #2,但是是的,您可以从文件系统本地的“远程”存储库中提取。至于从本地分支机构“pull ”,那不是 pull ; pull 涉及获取和 merge 。如果省略 fetch,它只是一个 merge ,所以你实际上是在谈论从本地分支 merge 。

关于Git repo 规划问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2722922/

相关文章:

git - 从提交历史中删除孤立分支

git log --all 在过滤器分支内不起作用

redis - 在 CentOS 7 中使用 ansible 从 iptables 迁移到 firewalld 设置

wordpress - 我无法让 Vhost 在 centos 6.8 上托管多个 wordpress 网站

amazon-ec2 - 如何在 Amazon Linux 上安装 SSSD

security - 如何通过 3 级 Perforce 安全性(基于票证)始终保持登录状态?

git - Visual Studio Express 2012 和 Git

.net - 如何将 .NET 标准库打包/发布到私有(private) VSTS Nuget 提要?

perforce - P4 整合被移动和删除的文件

encoding - Perforce 和 Jenkins 更改注释编码被破坏