我有一个项目我想开始在 github 上分享,我将它设置为另一个远程仓库。但是我有一些敏感的配置信息(amazon s3 帐户详细信息),我不想在 github 上明显分享。
有没有办法让远程 github 存储库忽略设置文件,但让本地和其他远程存储库使用它?
编辑 - 重新打开这个问题,看看是否有任何其他分布式源代码控制系统(mercurial?bazaar?等)可以做到这一点?
我有一个项目我想开始在 github 上分享,我将它设置为另一个远程仓库。但是我有一些敏感的配置信息(amazon s3 帐户详细信息),我不想在 github 上明显分享。
有没有办法让远程 github 存储库忽略设置文件,但让本地和其他远程存储库使用它?
编辑 - 重新打开这个问题,看看是否有任何其他分布式源代码控制系统(mercurial?bazaar?等)可以做到这一点?
您可以ignore
设置文件,但它永远不会受到版本控制。
我要做的是拥有 2 个配置文件。一个用于生产,一个用于开发,其中包含所有设置。敏感凭据位于主配置“来源”的另一个文件中,这些不受版本控制。通常,它们只有两行(用户名、密码)。
但是,一般来说,没有办法跟踪文件但不推送它。
Mercurial 的工作方式与 Git 相同,您已经得到了很好的建议。但是,您可以设置一个编码过滤器,该过滤器将从存储库中的文件中删除密码。
这个想法是你版本一个文件
username =
password =
但是有一个在本地填充值的文件。Mercurial 会在您运行时忽略这些值hg status
,hg diff
因为它会显示编码后的结果——编码过滤器会去除敏感信息。
就像是
[encode]
settings.cfg = sed "s/(username|password) = .*/\1 =/"
应该管用。(我现在无法测试,我在电车上。)
简单地不对文件进行版本控制仍然是处理此问题的简单、正常和推荐的方法。
通常,您可以通过拥有2 个配置文件来做到这一点(如果您想要示例配置,则 +1):
配置
username=root
password=r00t
配置.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
from 行.gitignore
),但它也会被您的程序自动使用,而不是默认config
文件。