2016-06-13 86 views
0

我和我的团队不断更新我们的Gemfile,这两条线在我们的应用程序中的第60和第61行不断变化。我们希望他们保持不变。有什么办法可以让这些线条永不改变?但仍然能够检查到我们的Gemfile的东西?有没有办法忽略git中的几条线?

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

可能重复[如何让git忽略个别行,即gitignore特定代码行](http://stackoverflow.com/questions/16244969/how-to-tell-git-忽略个人行,即gitignore的具体行) –

+0

是的,它不是混帐忽略。如果没有人跳进去,我会在回家后回答问题。 – bkunzi01

+1

线路改变的原因是什么?不要提交你不想改变的行?即不要使用'git add .'。使用'git add -i' – Zabba

回答

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中轨的特定的二进制文件,那么你可能需要设置环境变量在那里。

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

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

1

按照要求,涉及一个单独的文件答案:

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

旁边的Gemfile创建Gemfile.custom,包含开发商特定的宝石:

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

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

Gemfile.custom应该版本控制被忽略。

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

从项目的根执行此开始使用备用的Gemfile:

bundle config --global gemfile Gemfile.custom 

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

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

请注意,Gemfile.custom.lock中自定义gem的条目将在每个开发人员的基础上有所不同。开发人员在将其更改添加到版本控制时需要小心。

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的条目将在每个开发人员的基础上有所不同。开发人员在将其更改添加到版本控制时需要小心。

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条目都是相同的。它将只包含版本字符串,即没有提交哈希。尼斯和容易:)

相关问题