10

我有一个中央存储库,其中包含我想要防止被其他用户更改(通过推送)的文件子集。如果我将这些文件添加到.gitignore,它们将不会被克隆。

是否可以提供克隆所有文件的能力,但在克隆后将其中一些文件添加到.gitignore客户端?

4

4 回答 4

1

我最初想到了一个过滤器驱动程序(参见Pro Book),它将:

  • 在涂抹步骤保存您的文件内容
  • 在干净的步骤将恢复您的文件内容。

替代文字

但这不是一个好的解决方案,因为这些脚本是关于无状态文件内容转换的(参见这个 SO answer)。

您可以尝试在挂钩中强制执行保存/恢复机制(请参阅相同的 SO 答案),但请注意,它将在您的仓库中本地(它只会保护您的仓库中的文件,不会推送挂钩)

您还可以使用:

git update-index --assume-unchanged file

请参阅“使用 git,在命令行中从提交中临时排除已更改的跟踪文件”,同样仅是本地保护。这将保护它们免受外部推送到您的存储库(“导入”),但如果您发布它们(“导出”),则可以在客户端进行修改。

于 2010-07-29T06:54:04.407 回答
1

您可以将文件放在存储库中,提交它们,然后将它们添加到 .gitignore 中,然后从下一次提交中删除它们。

您仍然可以在提交之前直接获取文件(也许用一些东西标记它,以便可以更容易地通过名称获取它),这将保留文件的状态,同时不会让它在存储库中被意外地轻松编辑。

要在拉取克隆后访问这些文件,只需编写一个 rake 任务,为您的存储库的用户获取它们。

于 2012-11-04T01:14:16.557 回答
1

如果您需要这种级别的访问限制,在我看来问题出在其他地方。

尽管如此,如果您确实想实现这一点,请考虑Gitolite。它允许您定义相当详细的访问规则,并且应该足以满足您的需要。

Gitolite 文档:http ://gitolite.com/gitolite/master-toc.html

您可以定义“虚拟引用”来控制文件级别的访问。更多信息:http: //gitolite.com/gitolite/vref.html

于 2013-03-18T22:22:18.383 回答
0

Is there a specific reason why Git must itself be the answer to this?

How about making the files read-only, and dictating as policy that these files shouldn't be pushed?

Sometimes a technological solution is not the simplest way.

If somebody does push changes to these files, these changes can always be reverted.

于 2010-07-29T07:54:52.137 回答