9

我正在编写一个使用版本化核心数据模型的 iOS 应用程序。
我刚刚发布了一个在升级时崩溃的应用程序版本,因为我不小心编辑了版本并创建了一个新版本。

为了阻止这种情况再次发生,我想以某种方式标记旧版本,以防止在不首先删除标记的情况下修改这些文件的任何签入。

为了让事情变得更复杂,我使用的是 git-svn,所以将只读 repo 作为子模块是行不通的。

4

4 回答 4

3

基本上你不能。如果您没有关闭标志,
Git 将跟踪所做的更改。chmod

您可以使用一些解决方法来做到这一点。

  • Git 钩子

    在您的本地和服务器挂钩中验证所需文件不是其中的一部分,diff这意味着它没有被修改。

    为什么在两者中?

    由于可以删除用户的本地挂钩,因此您希望在服务器中对其进行验证。可以在pre-receive or update钩子中完成。


  • 只读子模块

    将文件放在单独的存储库中并将其用作子模块。除了您允许写入的用户之外,此存储库对所有用户都是只读的。
    我不知道你的 git 服务器是什么,但大多数服务器都支持只读或锁定到任何给定的分支。

  • git update-index --assume-unchanged

    它使 Git 忽略任何检查并假设它没有改变。当您对工作树文件进行更改时,您必须在修改它们之前或之后通过删除“假设未更改”位来明确告诉 Git。

这将“忽略”对此文件所做的任何本地更改。

于 2015-11-25T01:38:26.830 回答
0

您是否考虑过标记您的版本?标签就像只读分支。您可以将标记指针移动到不同的分支,但您必须使用强制 (-f) 选项,因此您至少必须考虑您在做什么,您不会意外地这样做。这是关于 git 标记的一个很好的参考:https ://git-scm.com/book/en/v2/Git-Basics-Tagging

于 2015-11-25T01:34:53.357 回答
0

初始化具有只读访问权限的新存储库并将其添加为子模块

于 2015-09-11T14:51:01.367 回答
-2

怎么样chmod 400 /path/to/file

于 2013-05-28T15:13:09.150 回答