【发布时间】:2011-09-26 12:31:16
【问题描述】:
我正在开始一个新的 Zend Framework 项目,我将在其中与设计师合作。我将使用 git 维护这个项目代码,通常设计师不会说 git(或任何编程语言),所以我想让他的事情变得简单,否则我担心他根本不会使用 git。我的计划是给他一些 Git gui,然后他应该只使用基本的 git 功能,例如 commit、diff、fetch、merge、push 和 pull。
我正在使用 gitolite 来维护我们的 git 存储库的共享副本,并且由于它具有细粒度的权限系统,我将仅授予设计人员 RW 访问专用分支(设计)的权限,并授予对其他分支的读取权限。
为了简单起见,我只想与他分享主项目中的一些文件夹(在ZF recommended structure 之后),他确实需要访问这些文件夹才能完成工作。同时我希望我们俩仍然可以相互融合。
他的分支的简化结构应该是这样的:
<project name>/
application/
layouts/
scripts/
views/
scripts/
public/
css/
images/
js/
我知道我可以使用子模块来完成这项任务,但是维护起来会很痛苦,因为我应该将我的项目拆分为(至少)4 个子存储库,他应该只能访问子存储库并且他将拥有 3 个存储库跟...共事。因此,如果这是唯一的解决方案,我将放弃这个想法。
我已经阅读过的一些链接让我认为我所问的问题是可能的:
这是我的问题:
- 如何创建缩减分支
design(git checkout -b design和git mv/rm?) - 如何配置 git 以跟踪跨分支的编辑(这样我就可以从 master 分支
git merge design,反之亦然)
更新:
我发现这两个 SO 问题给出的问题的另一种可能方法
- How do I tell git to always select my local version for conflicted merges on a specific file?
- How to setup a git driver to ignore a folder on merge
我尝试在设计分支中实现git rm all-unneeded-stuff 之后的第一个,我在主分支中进行了提交,其中涉及白名单路径中的一个文件和黑名单路径中的另一个文件,但git merge 失败并显示以下内容留言
CONFLICT (delete/modify): application/Bootstrap.php deleted in HEAD and modified in master. Version master of application/Bootstrap.php left in tree.
然后我在 master 分支中添加了一个新目录,当从设计合并时添加了新目录。我在驱动程序中放了一些调试回显,我发现在这两种情况下都没有调用它,可能是因为它不是真正的合并。
我还没有尝试过第二种方法(.gitignore 方法),但如果我理解该方法不符合我的需求,因为它只会忽略设计分支中的黑名单文件,但会检查它们在设计分支中,打破了我的要求。
我将我的实验推送到GitHub
更新 2:
我认为目前没有解决方案。使用当前的 git 实现,这根本无法实现。
我很想被反驳,但我怕它不会发生。
【问题讨论】:
-
我不了解Zend,所以我只会使用注释,但一般来说,您为什么不将项目拆分为他拥有RW权限的部分,其余部分?他所有的提交等都只对 RW 项目进行,其余的他只是使用拉取来获取最新版本。这就是我将如何处理某些库不可修改或我想使用 3rd 方交付的任何系统。
-
@Makis 基本上有两个原因:首先因为他需要访问多个文件夹(在我的情况下至少三个不同的文件夹),所以维护很多子模块会很痛苦,其次因为我希望他只能看到项目的一部分,以便让事情变得简单。
-
但是你为什么要使用子模块,这就是我要问的?您可以创建一个脚本,将所有其他项目更新到正确的目录。
-
类似于将更改拉入专用文件夹并将它们复制到不同的地方?可能是一个想法,我什至可以制作符号链接并避免复制。这样,我只需要维护几个存储库。
-
是的,类似的,取决于您的具体需求。
标签: git branching-and-merging git-merge git-subtree