2010-07-29 176 views
9

保护文件我有,我想从其他用户正在改变(推)来保护文件的一个子集的中央存储库。如果我这些文件添加到.gitignore,他们不会被克隆。在git仓库

是否有可能给克隆所有文件的能力,但克隆他们中的一些添加到.gitignore在客户端后?

+0

.gitignore是否被提交到存储库?你为什么要保护这些文件? .gitignore是否会添加任何类型的每个用户的访问权限,或者您的更改是否意味着* nobody *可以更改这些文件?你想达到什么目的? – 2010-07-29 06:50:54

+0

它会是一个简单的拒绝修改这些文件的推送选项吗?你也可以提供一个客户端钩子来拒绝坏提交。 – Cascabel 2010-07-29 12:25:48

回答

0

我最初以为大约filter driver(见Pro Book),这将:

  • 上涂抹一步保存文件的内容
  • 在清洁步骤将恢复文件的内容。

alt text

但是,这不是一个很好的解决方案,因为这些脚本是约无国籍文件内容转型(见this SO answer)。

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

您还可以使用:

git update-index --assume-unchanged file 

请参阅 “With git, temporary exclude a changed tracked file from commit in command line”,又只是一个地方保护。这会保护他们免受外部推到你的回购协议(“进口”),但如果你把它们发布(“出口”),可以比在客户端进行修改。

+0

谢谢。我知道git update-index --assume-unchanged,但它只适用于客户端。 我也知道钩子,但它们不是从中央仓库克隆的。 – andrexus 2010-07-29 08:54:18

+0

@andrexus:我知道:过滤器驱动程序是唯一可以推动的解决方案,但它需要弯曲污迹脚本以强制它了解相关文件的路径(保存/恢复),而它应该只知道内容的档案... – VonC 2010-07-29 09:03:51

1

有原因的Git本身必须回答这个特殊的理由?

如何使文件为只读,并指定为政策这些文件不应推送?

有时一个技术解决方案是不是最简单的方法。

如果有人确实将更改推送到这些文件,则始终可以恢复这些更改。

1

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

您仍然可以在提交之前直接抓取文件(也许可以用一些东西来标记它,这样可以更容易地通过名称获取它),这样可以保留文件的状态,但不会在存储库中轻松进行编辑事故。

拉动克隆后访问这些文件,只写获取他们为你的资料库的用户rake任务。