有没有办法忽略git中的几行?

时间:2016-06-13 18:37:42

标签: ruby-on-rails git

我的团队和我不断更新我们的Gemfile,我们的应用程序中第60行和第61行的这两行不断变化。我们希望它们保持不变。我们有什么方法可以让这些线条永远不变?但仍然可以检查我们的Gemfile中的东西?

group :development do
  gem 'ph_app', path: '/Users/joe12/Desktop/VBR/ph_app'
end

5 个答案:

答案 0 :(得分:1)

根据要求,回答涉及环境变量

在你的Gemfile中使用它:

group :development do
  gem 'ph_app', path: ENV['PH_APP_HOME']
end

每个开发人员在其环境中设置该环境变量。在Linux或OSX上通常会进入~/.bash_profile,例如:

export PH_APP_HOME='/Users/joe12/Desktop/VBR/ph_app'

如果您在IDE中运行特定于rails的二进制文件,那么您可能还必须在那里设置环境变量。

这不会干扰生产和测试环境,因为:development组不会捆绑在那里。 (你确实相应地设置了这些环境,对吗?)

请注意,Gemfile.lock中的相应条目将因开发人员而异。将更改添加到版本控制时,开发人员需要小心。

答案 1 :(得分:1)

根据要求,答案涉及单独的文件

使用非默认Gemfile作为开发人员。这是该项目最不具侵入性的解决方案,但也可能对开发人员来说最不方便。

Gemfile.custom旁边创建Gemfile,其中包含特定于开发人员的宝石:

eval File.read(__dir__ + '/Gemfile')

group :development do
  gem 'ph_app', path: ENV['PH_APP_HOME']
end

版本控制应忽略Gemfile.custom

eval是一个普通的Ruby指令。与File.read一起,它将导致读取另一个文件并解释其内容。您可以在其他文件中使用bundler DSL而无需执行任何特殊操作。

从项目根目录执行此操作以开始使用备用Gemfile:

bundle config --global gemfile Gemfile.custom

使用--global将为开发人员的计算机(针对该用户)设置所有项目的值。这就是开发人员可能不太喜欢这个解决方案的原因:他们机器上的每个捆绑项目都需要Gemfile.custom

或者,可以将自定义Gemfile选项提供给bundler命令。这样,其他项目不会受到影响,但每个bundler命令都必须使用该选项进行修改。 Binstubs可能会让这更方便,但我没试过。

请注意,Gemfile.custom.lock中自定义gem的条目将因开发人员而异。将更改添加到版本控制时,开发人员需要小心。

答案 2 :(得分:0)

您需要使用“git filters”以及“clean”和“smudge”的组合。这里的帖子更详细地解释了:

How to tell git to ignore individual lines, i.e. gitignore for specific lines of code

答案 3 :(得分:0)

涉及单独文件的另一个答案:

使用eval使用其他文件的内容。在Gemfile中,添加以下行:

other_path = __dir__ + '/Gemfile.local'
eval File.read(other_path) if File.exists? other_path

开发人员可以创建Gemfile.local并在其中添加自定义宝石:

group :development do
  gem 'ph_app', path: '/Users/joe12/Desktop/VBR/ph_app'
end

这个版本不是很干扰(但对于Gemfile中的额外行)。它非常灵活,因为本地配置是可选的。无需在生产机器上提供空文件。如果gem' ph_app'这是一个很好的解决方案。在开发环境中是可选的。

此解决方案有点类似于使用不同的Gemfile(请参阅其他答案),但配置了--local。但更灵活:)

请注意,Gemfile.lock中自定义gem的条目将因开发人员而异。将更改添加到版本控制时,开发人员需要小心。

答案 4 :(得分:0)

涉及相对路径的答案:

不要让开发人员决定将其他项目放在哪里ph_app,而是让它们将它放在与主机项目相同的目录中。 (不是嵌套但在同一个父目录中。)

然后将其添加到Gemfile:

group :development do
  gem 'ph_app', version: '2.1.32', path: '../ph_app'
end

请注意添加的版本字符串。多亏了这一点,bundler将确保本地文件实际提供ph_app的请求版本。每个开发人员都需要手动从版本控制中提取最新的更改。当主机项目切换分支时,他们可能还必须手动切换分支。也许这可以通过git触发器来缓解。

如果您的生产环境需要,您也可以以相同的方式提供ph_app。然后,您需要使用部署脚本安装正确版本的gem。但是,引用您的版本控制服务器(例如github)将更容易,并确保两个项目保持同步。

主机项目的Gemfile.lock中ph_app gem的条目对所有开发人员都是一样的。它只包含版本字符串,即没有提交哈希。很好,很容易:)