一年半的时间里,我已经让我的眼睛在从初社会的希望作出的关离SVN.一个特定问题保持我回来是无法锁定的二进制文件。在过去一年我还没有看到的事态发展对这一问题。我的理解是,锁定文件违反的基本原则的分布源的控制,但我怎么没看到一个网络开发公司可以利用的缝轨道的源代码和图像文件的变化时有可能为二进制文件冲突。

实现的影响锁,一个"中心"储存库中必须加以识别。不论的分布的性质内,大多数公司将有一个"中心"储存库对于软件的项目。我们应该能够标志一个文件为要求一个锁的治git仓库的指定地址。也许这就是困难的只跟踪文件的内容不文件吗?

做任何你有经验,在处理与操二进制文件应该被锁定修改之前?

注:它看起来像来源的齿轮的新的开放源分布的版本控制项目,真实性,已经锁定为它的一个目标。

有帮助吗?

解决方案

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

  

使用Git LFS 2.0.0,您现在可以锁定正在处理的文件,防止其他人推送到Git LFS服务器,直到您再次解锁文件。

     

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

其他提示

颠复已经锁,并且他们不只是咨询。他们可以强制执行使用 svn:needs-lock 属性(但也可以以故意破坏,如果必要)。这是正确的解决方案管理的非可以的文件。我工作的公司存储关于一切在颠复,并使用 svn:needs-lock 所有不可合并的文件。

我不同意"锁只是一个通信方法"。他们是一个更加有效的方法比推通知,如电话或电子邮件。颠复锁自记录(人有锁定)。另一方面,如果已经通过其他传统的推通知渠道,诸如电子邮件,谁做你发送通知?你不事先知道谁可能需要编辑的文件,尤其是关于开放源码项目,除非你有一个完整的列表,你的整个团队。因此,这些传统通信方法几乎没有有效的。

中央锁服务器,同时对该原则的DVC,是唯一可行的方法不可合并的文件。只要DVC没有一个中央锁功能,我认为它将保持我工作的公司采用颠复活动。

好的解决方案将作一个合并工具对于你所有的二进制文件的格式,但这是一个长期和持续的目标将永远不会已完成。

这是一个有趣的读的主题。

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

  • 有一种方式标记的文件,如"需求锁"(如"svn:需要-锁"的财产)。
  • 在结账时,git将标志着这样一种文件的只读。
  • 新的命令 git-lock 会联系的一个中央锁服务器运行的地方要求允许锁。
  • 如果锁定服务授予的权限,标记的文件的读写。
  • git-add 将会提前通知锁定服务器内容哈希上锁的文件。
  • 锁定服务器将观看内容的散列出现在犯的主存储库。
  • 当哈出现,释放锁。

这是非常多半生不熟的想法和有潜力的孔无处不在。这也违反了精神录,但它可以肯定是有用的,在一些情况。

在一个特定的组织,这种事情或许可以使用的适当组合的脚本包装和承诺挂钩。

回应马里奥对二进制文件中多个地方发生的变化的额外关注。所以场景是Alice和Bob都在同时对同一个二进制资源进行更改。他们每个都有自己的本地仓库,从一个中央遥控器克隆。

这确实是一个潜在的问题。所以Alice先完成并推送到中央 alice / update 分支。通常情况下,如果发生这种情况,Alice会发布一条通知应该进行审核。鲍勃看到并审查它。他可以(1)将这些更改自己纳入他的版本(从 alice / update 分支并对其进行更改)或(2)将自己的更改发布到 bob / update 。他再次发布公告。

现在,如果Alice推送到 master ,那么当他拉 master 并尝试合并到他的本地分支时,Bob会陷入两难境地。他与爱丽丝的冲突。但同样,相同的程序可以适用于不同的分支。即使Bob忽略了Alice的所有警告和提交,也总是可以撤出Alice的修复提议。这只是一个沟通问题。

由于(AFAIK)Subversion锁只是建议性的,因此电子邮件或即时消息可以起到同样的作用。但即使你不这样做,Git也会让你解决它。

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

我们刚刚开始使用Git(之前使用过Subversion),我发现工作流程有所改变,可能有助于解决您的问题,而无需锁定。它利用了git的设计方式以及分支的容易程度。

基本上,归结为推送到非主分支,审查该分支,然后合并到主分支(或目标分支中的任何一个)。

git的方式是“预期的”。要使用,每个开发人员都会发布他们自己的公共存储库,并请求其他人从中提取。我发现Subversion用户遇到了麻烦。因此,我们推动在中央存储库中分支树,每个用户都有自己的分支树。例如,像这样的层次结构可能有效:

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

随意使用您自己的结构。注意我还展示了主题分支,另一种常见的git习语。

然后在用户a的本地回购中:

feature1
feature2

并将其送到中央服务器(来源):

git push origin feature1:users/a/feature1

(这可以通过配置更改来简化)

无论如何,一旦feature1被审查,谁负责(在我们的例子中,它是该功能的开发者,您可以让一个用户负责合并到主人),执行以下操作:

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

pull执行获取(将任何新主服务器更改功能分支)和更新主服务器到中央存储库具有的功能。如果用户a完成了他们的工作并且正确地跟踪了主人,那么合并应该没有问题。

所有这些意味着,即使用户或远程团队对二进制资源进行了更改,也会在将其合并到主分支之前对其进行审核。关于何时进入主分支,有一个明确的描述(基于过程)。

你也可以使用git hooks以编程方式强制执行这方面的内容,但同样,我还没有使用过这些,所以不能谈论它们。

当我使用Subversion时,我虔诚地在所有二进制文件甚至难以编辑的文本文件上设置 svn:needs-lock 属性。我永远实际上没有遇到任何冲突。

现在,在Git中,我并不担心这些事情。记住:Subversion中的锁实际上不是强制锁,它们只是通信工具。猜猜看:我不需要Subversion进行沟通,我可以通过电子邮件,电话和即时通讯来管理。

我做的另一件事是用纯文本格式替换许多二进制格式。我使用reStructuredText或LaΤ Ε Χ而不是Word,CSV而不是Excel,ASCII-Art而不是Visio,YAML代替数据库,SVG代替OO Draw,abc代替MIDI,等等。

值得检查当前的工作流程,看看是否真的需要锁定图像。对于两个人来说,独立编辑图像是相对不寻常的,而且一些沟通可以有很长的路要走。

我已经在git讨论组上讨论了这个问题,并得出结论,此时有一个没有同意git集中文件锁定的方法。

TortoiseGit支持将文档委派给Office本身的Office文档的完整git工作流程。它也可以委托OpenOffice for OpenDocument格式。

我不希望文件锁定永远使它成为git中的一个功能。你最感兴趣的是什么样的二进制文件?您是否真的对锁定文件感兴趣,或者只是防止因无法合并而导致的冲突。

我似乎记得有人正在谈论(甚至实施)支持在git中合并OpenOffice文档。

cad文件怎么样?如果文件没有锁定,也要保持只读,大多数cad程序只会打开它们一个任意位的变化,被任何vcs看作是一个新文件。因此,在我看来,锁定是一种理想的方式,用于通信您打算更改某些particalur文件。同样,它可以防止某些软件首先获得写访问权限。这允许更新本地文件,而无需完全关闭软件或至少关闭所有文件。

只需将cc文本文件与要锁定的文件放在cc中,然后让更新挂钩拒绝它。

它可能是真的,重组的一个项目可以帮助避免锁,但是:

  • 小组还举办的其他优先事项(地点、客户...)
  • 工具还可选择的其他目标(兼容性、价格、使用方便的大多数雇员)
  • 某些工具的(因此那里的二进制文件)不可避免的,因为根本就没有更换,可以做同样的工作,拟合同的公司需求相同的价格。

到请求,就整个公司可能会重新组织它们的工作流程和更换其所有工具产生的二进制文件,只有能够工作}类,因为缺乏锁,听起来很低效率的。

锁不适合从初的理念(这是从来没有成为二进制文件),但有不忽略的情况,在那里锁是最有效的方式来解决这一问题。

这不是解决方案,而是对需要锁定机制的原因的评论。在某些领域中使用了一些工具,这些工具使用二进制格式,这些格式是平坦的任务关键和“使用更好/不同的工具”。不是一个选择。没有可行的替代工具。即使你以ascii格式存储相同的信息,我熟悉的那些也不会成为合并的候选者。我听到的一个反对意见是你希望能够脱机工作。我正在考虑的特定工具无论如何都不能脱机工作,因为需要提取许可证,所以如果我在笔记本电脑上有数据,那就不像我可以在火车上运行工具了。也就是说,如果我连接速度慢,git会提供什么,我可以获得许可证并且还可以下载更改但是可以使用快速本地副本来查看不同版本。即使在这种情况下,DVCS也能给你带来好处。

一个观点是git根本不是使用的工具,但它对于所有使用它管理的文本文件都很好,并且对于不同的文件需要不同的版本控制工具很烦人。

通过邮件的咨询锁定方式确实很糟糕。我已经看到了,并且已经厌倦了“我正在编辑它”的无穷无尽的电子邮件。 “我已完成编辑”并看到由于它而失去的变化。我想到的一个特殊情况是,一个较小的ascii文件的集合会更好,但这是一个旁边。

我不建议在我的公司使用git来解决同样的问题。我们将EA用于所有设计,并使用Microsoft Word作为文档,我们事先并不知道谁可以编辑特定文件,因此独占锁定是我们唯一的选择。

git在非团队环境中可以很好地工作,每个开发人员只负责一段代码或文件,因为在这种情况下,不需要关于锁的通信。

如果您的组织需要团队环境(通常是为了剥离开发人员的工作安全性),那么使用svn,git不适合您。 Svn提供了源代码控制和开发人员之间关于锁的通信。

Git没有提供锁定文件的任何命令,但我已经资助了一种使用git hooks实现该功能的方法。 需要辅助服务器来存储锁信息。我们可以使用预提交钩子来检查是否有任何已提交的文件被锁定。如果有人锁定文件,程序应该告诉辅助服务器锁柜和锁定文件的信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top