锁定使用Git版本控制系统的二进制文件(Locking binary files using git

2019-06-17 17:35发布

多年以来一年半,我一直在从SVN使得离开开关的希望保持对Git的社区我的眼睛。 拖我的一个特别问题是无法锁定二进制文件。 在过去的一年我还没有看到在这个问题上的发展。 据我所知,锁定文件违背了分布式源控制的基本原则,但我没有看到一个网络开发公司如何利用混帐的优势,跟踪源代码和图像文件发生更改时没有为二进制文件冲突的可能性。

为了实现锁定效果,“中央”仓库必须确定。 不管混帐的分布式特性,大多数公司将有一个软件项目中的“中央”资料库。 我们应该能够文件标记为在指定的地址需要从执政git仓库的锁。 也许这是因为Git跟踪文件的内容而不是文件变得困难?

做任何你在处理与GIT和应该修改之前锁定二进制文件的经验?

注意:它看起来像源档的新的开源分布式版本控制项目,真实性,已锁定为目标之一。

Answer 1:

Git的LFS 2.0增加了对文件锁定的支持。

使用Git LFS 2.0.0你现在可以锁定你正在积极努力,防止其他人推到Git的LFS服务器,直到你再次解锁文件的文件。

这将防止合并冲突以及对非可合并的文件丢失了工作在文件系统级别。 虽然它可能似乎矛盾的Git的分布式并行性质,文件锁定是许多软件开发的工作流程,特别是对于大型团队与二进制资产工作的重要组成部分。



Answer 2:

颠覆了锁,他们不只是咨询。 他们可以使用强制执行svn:needs-lock属性(但也必要时故意破坏)。 这对于管理非可合并文件的解决方案。 该公司为我工作的门店只是在颠覆一切,并使用svn:needs-lock所有非可合并文件。

我不同意“锁只是一种通信方法”。 他们比推送通知,如电话或电子邮件的一个更有效的方法。 颠覆锁自我记录(谁的锁)。 在另一方面,如果你有其他的传统推通知渠道,如电子邮件进行沟通,谁做你发送通知? 你不事先知道谁可能要编辑的文件,特别是对开源项目,除非你有你的整个开发团队的完整列​​表。 因此,那些传统的通信方式是不是几乎一样有效。

中央锁服务器,而对DVCS的原则,对于非可合并的文件的唯一可行的方法。 只要DVCS没有一个中央锁功能,我认为它会继续我的使用Subversion工作的公司。

更好的解决办法是让你所有的二进制文件格式合并工具,但是这是一个长期的,并且永远不会被“汉化”当前的目标。

下面是关于该主题的有趣的阅读。



Answer 3:

我同意锁定二进制文件是一些环境的必要功能。 我只是有一个关于如何实现这一点,虽然想法:

  • 有文件标记为“需要锁”(如“使用svn:需要锁定”属性)的方式。
  • 在结账时,混帐将标志着这样的文件为只读。
  • 一个新的命令git-lock将中央锁服务器运行联系的地方要问权限锁定。
  • 如果锁服务器授予权限,标记文件读写。
  • git-add将通知锁定的文件的内容哈希的锁服务器。
  • 锁服务器会看该内容哈希出现在主存储库提交。
  • 当哈希出现,解除锁定。

这不能不说是一个半生不熟的想法,并有潜在漏洞无处不在。 这也违背了git的精神,但它绝对可以在某些情况下是有用的。

在一个特定的组织,这样的事情也许可以使用脚本包装的合适组合,并承诺挂钩建成。



Answer 4:

在回应马里奥与变化上的二进制文件的多个地方发生的额外关注。 因此,情况是Alice和Bob都在同一时间进行更改,以相同的二进制资源。 他们每个人都有自己的本地回购,从一个中央远程克隆。

这确实是一个潜在的问题。 于是,爱丽丝完成第一和推到中央alice/update分支。 通常,当发生这种情况,爱丽丝会发表一个声明,它应该进行审查。 Bob看到和评论它。 他可以(1)结合这些变化投入自己的版本(从分支alice/update ,使他改变这一点)或(2)发布了自己的改变bob/update 。 再次,他会作声明。

现在,如果Alice推向master相反,鲍勃有一个矛盾,他拉的时候master并尝试融入他的当地分支机构。 他与Alice的冲突。 但同样,相同的过程可以申请,只是在不同的分支。 而且,即使鲍勃忽略所有的警告,并承诺在Alice的,它总是能够拉出Alice的承诺解决的事情。 这简直变成一个沟通问题。

由于(据我所知)Subversion的锁只是咨询,电子邮件或即时消息可以达到相同的目的。 但是,即使你不这样做,GIT中让你解决它。

没有,没有锁定机制本身。 但是,锁定机制往往只是良好的沟通的替代品。 我相信这就是为什么Git的开发尚未添加一个锁定机制。



Answer 5:

我们使用(以前使用的Subversion)最近的Git刚开始,我还发现了一个变化的工作流程可能与您的问题有所帮助,而不需要锁。 它利用了Git是如何设计和多么容易分支。

基本上,它归结为推到非主分支,这样做分支的评价,然后合并到主分支(或任何目标分支是)。

方式Git是“预期”来使用,每个开发人员发布自己的公共仓库,他们要求其他人来拉。 我发现,Subversion用户有麻烦。 所以,相反,我们推到分支树在中央资料库,每个用户有自己的分支树。 举例来说,像这样的层次结构可能工作:

users/a/feature1
users/a/feature2
users/b/feature3
teams/d/featurey

随意使用自己的结构。 请注意,我还显示主题分行,另一种常见的git的成语。

然后在本地回购为用户提供:

feature1
feature2

而要得到它的中央服务器(产地):

git push origin feature1:users/a/feature1

(这也许可以与配置改变被简化)

无论如何,一旦特征1进行审查,任何人负责(在我们的情况下,它的功能的开发者,你可以有负责合并到主单个用户),执行以下操作:

git checkout master
git pull
git merge users/name/feature1
git push

拉不取回(拉任何新的主变化特性分支)和更新主什么中央档案库了。 如果用户做他们的工作和正确的追踪高手,也应与合并没有问题。

所有这些都意味着,即使一个用户或远程团队进行了更改为二进制资源,然后才会慢慢纳入主分支它被审查。 并有一个明确的划分(基于过程)当东西进入主分支。

您也可以通过编程执行本使用Git挂钩的方面,但同样,我还没有与这些还没有工作,所以他们不能发言。



Answer 6:

当我使用Subversion,我虔诚地设置svn:needs-lock财产所有二元,甚至难以编辑文本文件。 我从来没有真正经历过任何冲突。

现在,在Git的,我不担心这样的事情。 记住:在Subversion的锁实际上并没有强制性的锁,他们只是通讯工具。 你猜怎么着:我不需要Subversion的沟通,我可以管理与电子邮件,电话和IM就好了。

我做的另一件事,是用纯文本格式,以取代许多二进制格式。 我用新结构化或LaΤΕΧ而不是字,而是CSV的Excel,ASCII艺术,而不是Visio中,YAML而不是数据库,SVG的,而不是面向对象的绘制,ABC,而不是MIDI,等等。



Answer 7:

这是值得研究你当前的工作流程,看看是否锁定图像确实是必要的。 这是比较不寻常,两个人独立编辑的图像,有点沟通会很长的路要走。



Answer 8:

我已经讨论了git的小组讨论这个问题,并得出结论,在这个时候,有没有在中央文件锁定混帐的方法达成一致。



Answer 9:

TortoiseGit支持Office文档委托DIFF到Office本身充满git的工作流程。 它的工作原理也委托到OpenOffice的OpenDocument为格式。



Answer 10:

我不希望文件锁定到永远做它作为一个git的功能。 什么样的二进制文件是你最感兴趣的? 你真正感兴趣锁定的文件,或者只是防止由于不能够将它们合并冲突。

我似乎记得有人说话(甚至执行)支持的混帐合并的OpenOffice的文档。



Answer 11:

What about cad files? If the files aren't locked, to be kept read-only as well, most cad programms would just open them an change arbitrary bits, seen as a new file by any vcs. So in my view, locking is an ideal means for communicating your intend to change some particalur file. As well, it prevents some Software to gain write access in the first place. This allows updates of the local files, without the need to close the software or at least all files entirely.



Answer 12:

只要把一个文本文件,在CC与要锁定,然后让更新钩拒绝它的文件。



Answer 13:

这可能是真实的,那重组项目可以帮助避免锁定,但是:

  • 队也被其他优先事项组织(位置,客户,...)
  • 工具也被其他目标选择(兼容性,价格,易用的大多数员工)
  • 有些工具(因此有二进制文件)是无法避免的,因为根本就没有更换,可以做同样的工作,配合同样以该公司需要以同样的价格。

要请求,那整个公司可能会重新组织他们的工作流程,并取代所有的工具,产生的二进制文件,只能够使用Git工作因缺乏锁的,听起来非常低效的。

锁不适合git的理念(这是从来没有的二进制制),但也有不可忽视的情况下,其中锁是为了解决这样的问题,最有效的方法。



Answer 14:

这不是一个解决方案,而是为什么需要锁定机制评论。 还有在一些领域使用的一些工具,使用二进制格式仅是其中平出关键任务和“使用更好/不同的工具”,只是不是一种选择。 有没有可行的替代工具。 我熟悉的真正的人不会是候选人,如果你存储在ASCII格式相同的信息,甚至合并。 一种反对意见我听说是你希望能够脱机工作。 特定的工具,我想真的不起作用由于需要拉许可证,所以如果我有一台笔记本电脑的数据是不喜欢我可以在火车上要运行该工具下线反正。 这就是说,什么混帐不提供,如果我有一个缓慢的连接,我可以得到许可,也拉下的变化,但有快速的本地副本,看着不同的版本。 这是一个很好的事情是,DVCS让你即使在这种情况下。

其中一个观点是,Git是根本不使用工具,但它是指,被也与它管理的所有文本文件不错,很烦人需要为不同的文件不同的版本控制工具。

该整理咨询锁的 - - 通过邮件的方式真的很糟糕。 我已经看到了,并已累“我编辑吗?”“我做编辑”的电子邮件,因为它失去了可见的变化层出不穷。 我想的具体情况是一个地方的小的ASCII文件的集合将是更加美好但那是题外话。



Answer 15:

我不是在暗示我公司使用git进行了同样的问题。 我们使用EA为我们所有的设计和文档Microsoft Word中,我们不知道事先谁可以编辑一个特定的文件,以便独占锁定是我们唯一的选择。



Answer 16:

git会在非团队环境中,每一个开发者是一段代码或文件全权负责,因为在有关锁这种情况下,通信不需要很好地工作。

如果您的组织需要团队环境(通常是剥去工作保障开发人员),然后使用SVN,Git是不适合你。 SVN既提供 - 有关锁的开发者之间源的控制和通信。



Answer 17:

Git是不提供任何命令锁定文件,但我已经资助方式使用Git挂钩来实现该功能。 需要一个辅助服务器来存储锁定信息。 我们可以用一个pre-commit钩子来检查是否有任何提交的文件被锁定。 如果有人锁定了一个文件,程序应该告诉辅助服务器更衣室和锁定的文件的信息。



文章来源: Locking binary files using git version control system