有没有办法在使用git时锁定fork上的单个文件或目录?

时间:2012-12-01 18:14:04

标签: git github githooks github-api

我们是由60多名开发人员组成的团队,他们正在开发相同的产品,并且正在从SVN迁移到Git和GitHub。我们在SVN中有一个进程,在单个文件被锁定的情况下,每当开发人员想要提交代码时,他都需要由文件所有者解锁。我们三个人是150多个文件的拥有者。解锁之前是代码审查。

在Github中,我们计划使用Fork-Clone模型 - 每个项目正在开发的一组dev将执行fork,每个开发人员都会执行fork的克隆,编写代码&提交到原点,该功能的引导将向上游执行拉取请求。

虽然这看起来很好,但问题是当一个大项目交付时,它会带来大量的审查更改,因此会增加文件所有者的负担。此外,这可能发生在后期的开发周期中,因此项目可能会受到危害。

我们认为可能有用的一种方法是在git push完成原点(fork)时使用钩子。可以有一个最终评论git pull to upstream。

但是,我们找不到任何github扩展或推送挂钩。有没有快速的方法(阅读,现有的扩展)与Github这样做或我们应该使用我们将与git使用相同的钩子?

8 个答案:

答案 0 :(得分:83)

没有机会,如果文件不可合并而你需要锁定它,请使用集中式解决方案而不是GIT,即SVN或ClearCase。

答案 1 :(得分:19)

如果您使用git LFS(某些git托管服务提供商支持,例如GitHub),您可以使用File Locking

通过编辑.gitattributes文件将文件类型标记为可锁定:

*.docx lockable
# Make MS Word files lockable

并将其锁定:

$ git lfs lock example.docx

您可以添加git lfs unlock example.docx,使用--force和其他人解锁您的文件。

答案 2 :(得分:3)

Git不提供任何锁定功能,因为它是分散的。但是,如果您在GitLab Enterprise Edition Premium上托管代码,则可以use the web interface to lock individual files or folders完成您想要的操作。

如果您不想在其他人的服务器(他们的网站)上托管您的项目,您也可以下载GitLab并将其托管在您自己的网络服务器上。

答案 3 :(得分:3)

并非完全锁定,但是Github引入了一个称为“ Code Owners”的概念。 允许您将部分代码库限制为仅在代码所有者检查后才允许提交

答案 4 :(得分:0)

这是可能的。 git-lfs 2.0引入了锁定文件的功能: 请参阅以下链接:https://github.com/git-lfs/git-lfs/wiki/File-Locking。从TFS 2017.2:https://docs.microsoft.com/en-us/vsts/release-notes/开始支持此功能。

答案 5 :(得分:0)

您可以使用LFS,也可以锁定单个文件,或者强制将文件添加到.gitattributes文件中,

https://github.com/git-lfs/git-lfs/wiki/File-Locking

答案 6 :(得分:-1)

在Git中无法做到这一点。正如其他人所说,如果文件是" mergable",您可以尝试变基,改变您的行为方式。 在我们的例子中,我们有一个约定:如果你真的需要锁定它,重命名它。但我们只在办公室文件等中做这些事情 这种贡献并没有提供解决方案,这是一种解决方法(但stackoverflow不允许我将其添加为注释。

答案 7 :(得分:-15)

这个用例是Git比SVN好得多的原因之一 - > rebase!如果您遵循良好的git工作流,则在提交Pull请求之前从上游进行重新绑定。你不需要担心文件锁定和踩到另一个人的提交和合并冲突等...一个rebase将你的工作放在一边,应用远程提交,然后在顶部应用你的工作。

我认为这只是在你的过程中重新思考并依赖于git与强制在git之上拟合Subversion工作流的强项。您的“fork-clone”模型也可能需要另外一个外观。大多数情况下,每个开发人员都有自己的分支,如果需要,您可以通过团队之间的远程分享回购。但是,分享相同来源的贡献者会产生一些坏习惯。

Gitflow是一个非常受欢迎的git工作流程,Github themselves has some nice tips and shares their workflow