Git 是否有任何版本控制系统有一个;“仅本地持续变化”;特征?
我在玩git时遇到了这个问题,但我会问一般情况 我只是想到了一个可能对版本控制很好的特性,但我不知道它是否存在,或者它叫什么。我想称之为持久性局部更改 假设我在svn中有一个配置文件,它有很多有用的不可复制的东西(因此必须在版本控制中),但有一个部分每个人都需要自己编辑。可能是数据库配置,或用户名和密码,或某些第三方软件的本地路径。你在这种情况下的选择是Git 是否有任何版本控制系统有一个;“仅本地持续变化”;特征?,git,version-control,Git,Version Control,我在玩git时遇到了这个问题,但我会问一般情况 我只是想到了一个可能对版本控制很好的特性,但我不知道它是否存在,或者它叫什么。我想称之为持久性局部更改 假设我在svn中有一个配置文件,它有很多有用的不可复制的东西(因此必须在版本控制中),但有一个部分每个人都需要自己编辑。可能是数据库配置,或用户名和密码,或某些第三方软件的本地路径。你在这种情况下的选择是 在版本控制中编辑wars。只需不断更改文件,并希望其他人在您之前放弃编辑文件 编辑它,但永远不要提交这些更改。他们只是坐在那里让你的“What
如果它不存在,有没有理由不存在?(有人考虑过并认为这是个坏主意吗?如果可以将多个存储库合并到一个工作树中,这是可行的。最简单的解决方案是符号链接 问题是(这使得它很难)VCS想要保留变更集的概念。因此,如果您将这样一个文件与常规版本文件一起提交,那么这些更改是否属于变更集?在不同的机器上拥有相同的变更集意味着不同的事情,这显然令人困惑
对于多个存储库,您当然可以在一个或另一个存储库中进行提交。这需要多少本地设置取决于VCS系统。例如,对于svn:externals,您需要在每台计算机上使用相同的
文件:
存储库,但它们可以指向不同的文件集。使用符号链接,您可以以任何形式组织它(假设符号链接本身没有版本控制)。我一直通过努力避免这种情况来解决这个问题
我试图使所有环境尽可能彼此相似。唯一不同的地方通常是登录,有时是基础设施服务(DB、MessageBroker、企业数据服务等)的URL
所有开发人员的开发环境都是完全相同的,开发环境的配置是签入的,这样开发人员就可以从版本控制和构建中签出代码,而无需进一步的修改
CI和测试环境的密码和配置已签入,因此构建和部署服务器可以在测试环境中自动启动系统
生产密码从未签入(这通常是我工作的法律要求),管理员在生产环境中维护密码文件。我使用传播
命令在上执行类似操作
简而言之,我有一个“开发”分支和一个“部署”分支。在部署的分支中,配置有一些不同的设置(一些目录和DEBUG=False)。当我想要部署时,我会执行一个从开发到部署分支的
mtn传播。然后在服务器上,我进行拉入和更新,以便工作区从其分支获取最新的更改,其中包括所有新的开发,但尊重设置差异。您可以忽略版本控制中的任何配置文件。这是文件
例如,如果要忽略所有日志目录,请在该文件中添加一行:
log/*
要忽略.DS_存储文件,请添加一行:
.DS_Store
然后您可以在本地更新该文件,您将永远不会在已修改但未提交的文件中看到它。如果您执行一个git add.
,它将不会被添加到提交中
如果您需要将配置文件放到git中,但只在其中保留一个密码或var,那么我要做的就是在配置文件中调用一个远程文件。这个文件包含我的密码
例如,在rails项目中,我的数据库配置如下所示:
production:
database: project_database
username: database_user
password: <%= File.read('path/to/my/password/file').chomp if File.readable? 'path/to/my/password/file' %>
生产:
数据库:project_数据库
用户名:数据库用户
密码:
文件“path/to/my/password/file”不在版本控制中。所以我的配置文件是版本连接的。但是密码取决于我们所在的机器
它还有一个优点,就是在您的版本控制中没有密码供潜在的任何人读取。这可能对VisualStudio更为具体,但我认为大多数IDE都具有类似的功能 在我所有的app/web配置中,设置会因不同的环境而改变,我将它们拆分为自己的文件,这样我的主配置如下所示
<dataConfiguration configSource="Config\Development\dataConfiguration.config" />
<connectionStrings configSource="Config\Development\connectionStrings.config" />
<appSettings configSource="Config\Development\appSettings.config"/>
对于每个文件,它都类似于
<?xml version="1.0" encoding="utf-8" ?>
<dataConfiguration defaultDatabase="defaultDatabase"/>
之后,我为每个环境Dev/Staging/Prod等创建文件夹,并在每个文件夹中使用不同的子配置文件,以便将所有设置检入TFS。我有我的web部署项目设置,可以在每个版本配置中拉入适当的文件。稍后,当我配置TFS来管理我的发布时,只要让它复制正确的配置,就可以轻松实现这一点
在这一点上,您可以为程序签入基线,然后当开发人员只需要为自己更改一些他们不打算签入的内容时,他们可以轻松地使文件不再是只读的