如何在git中隐藏单个远程仓库中的文件?

时间:2011-12-12 16:31:09

标签: git mercurial bazaar git-remote

我有一个项目,我想开始在github上分享,我将其设置为另一个远程回购。但我有一些敏感的配置信息(亚马逊s3帐户详细信息),我不想在github上明显分享。

有没有办法可以让远程github repos忽略设置文件,但是本地和其他远程repos可以使用吗?

编辑 - 重新打开这个问题,看看是否有其他可以做到这一点的分布式源代码控制系统(mercurial?bazaar?等)?

3 个答案:

答案 0 :(得分:1)

您可以ignore您的设置文件,但它永远不会受版本控制。

我所做的是拥有2个配置文件。一个用于生产,一个用于dev,包含所有设置。敏感凭证位于主配置“源”的另一个文件中,并且这些文件不受版本控制。通常,它们只是两行(用户名,密码)。

但是,一般情况下,无法跟踪文件但无法推送文件。

答案 1 :(得分:1)

Mercurial与Git的工作原理相同,你已经为此提出了很好的建议。但是,您可以设置一个编码过滤器,该过滤器将从存储库中的文件中删除密码。

您的想法是使用

对文件进行版本控制
username =
password =

但是在本地填充了一个文件。 Mercurial会在您运行hg statushg diff时忽略这些值,因为它会在编码后显示结果 - 编码过滤器会删除敏感信息。

这样的东西
[encode]
settings.cfg = sed "s/(username|password) = .*/\1 =/"

应该有效。 (我现在不能测试它,我在电车里。)

简单地不对文件进行版本控制仍然是处理此问题的简单,正常和推荐的方法。

答案 2 :(得分:0)

通常你可以通过 2个配置文件来实现这一点(如果你想要一个示例配置,则可以+1):

<强>配置

username=root
password=r00t

<强> config.local

username=tkone
password=yoursecretpassword

config.local.sample (可选,但建议使用)

username=replace with your local username and rename file to config.local
password=replace with your local password and rename file to config.local

<强>的.gitignore

config.local

.gitignore中,您需要放置config.local文件(您要保护的文件)并检查config(和config.local.sample,如果您决定使用一个)。

当有人克隆您的项目时,他们会看到以下文件:

config
config.local.sample
.gitignore
all your other project files

重要!!! 从加载配置文件的程序中,您应该检查是否有 config.local 文件。如果没有,请加载默认值: config

结论

您不会发布包含敏感信息的config.local。默认配置(从远程克隆)将适用于用户名root和密码r00t有效的合理且罕见的情况。 config.local.sample将提供本地自定义指令(如果有人需要它们)。

如果他们确实创建了config.local文件,则会自动忽略(因为来自config.local的{​​{1}}行),但它也会获得您的程序自动使用而不是默认的.gitignore文件。