如何在git中对单个远程repo隐藏文件?

如何在git中对单个远程repo隐藏文件?,git,mercurial,bazaar,git-remote,Git,Mercurial,Bazaar,Git Remote,我有一个项目,我想开始在github上共享,我将它设置为另一个远程回购。但我有一些敏感的配置信息(AmazonS3帐户详细信息),我显然不想在github上共享 有没有办法让远程github repo忽略设置文件,但让本地和其他远程repo使用它 编辑- 重新打开此问题,查看是否有其他分布式源代码管理系统(mercurial?bazaar?等)可以执行此操作?您可以忽略设置文件,但它将永远不会受到版本控制 我要做的是有2个配置文件。一个用于生产,一个用于开发,其中包含所有设置。敏感凭据位于另一个

我有一个项目,我想开始在github上共享,我将它设置为另一个远程回购。但我有一些敏感的配置信息(AmazonS3帐户详细信息),我显然不想在github上共享

有没有办法让远程github repo忽略设置文件,但让本地和其他远程repo使用它

编辑-
重新打开此问题,查看是否有其他分布式源代码管理系统(mercurial?bazaar?等)可以执行此操作?

您可以
忽略设置文件,但它将永远不会受到版本控制

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


但是,一般来说,除了推送文件之外,没有办法跟踪文件

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

配置

username=root
password=r00t
本地配置

username=tkone
password=yoursecretpassword
config.local.sample(可选,但推荐)

.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
文件,它将被自动忽略(因为
.gitignore
中的
config.local
行),但是它也会被你的程序自动使用,而不是默认的
config
文件。

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

其思想是使用

username =
password =
但是有一个本地填充值的文件。运行
hg status
hg diff
时,Mercurial将忽略这些值,因为它会在编码后显示结果-编码过滤器会去除敏感信息

差不多

[encode]
settings.cfg = sed "s/(username|password) = .*/\1 =/"
应该有用。(我现在不能测试,我在电车里。)


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

meh!我知道这是正确的答案,但我想相信有办法!!相信某件事并不能使它成为现实,所以你要振作起来所有这些都是很好的答案。我可能不会转而使用hg,但很高兴知道它们都没有真正提供解决方案。
[encode]
settings.cfg = sed "s/(username|password) = .*/\1 =/"