我在与我的团队合作的项目中遇到了问题,我想知道你是如何管理这样的情况的。
我们在同一个项目中工作,该项目由我们制作宝石,我们也在研究这些宝石。
所以我们的gemfile看起来像:
# Person 1
gem "my_gem", '1.1', :path => '/Users/person1/apps/my_gem/'
# Person 2
gem "my_gem", '1.1', :path => '/Users/person2/apps/my_gem/'
# Person 3
gem "my_gem", '1.1', :path => '/Users/person3/apps/my_gem/'
问题在于,当我们使用Git推送到我们的遥控器时,我们每次都会发生冲突(声音逻辑)。我尝试使用dotenv gem的环境变量,做类似的事情:
# Person x
gem "my_gem", '1.1', :path => ENV["MY_PATH"]
我尝试了很多不同的方法,使用了许多stackoverflow的帖子作为参考......但是没有用。
答案 0 :(得分:3)
我有2个解决方案:
您可以为每个gem分配一个单独的git存储库,您的Gemfile
将如下所示:
# Assuming private Github
# and your private keys are setup correctly on Github.
gem 'my_gem', '1.1', git: 'git@github.com:username/my_gem.git'
__dir__
。 Kernel.__dir__
返回调用此方法的文件的绝对目录。这意味着,无论用户如何,我们都可以随时获取基本目录。
假设Gemfile
位于/Users/person1/apps/my_app/Gemfile
。然后__dir__
将返回/Users/person1/apps/my_app
。
gem "my_gem", '1.1', path: File.join(__dir__, '..', 'my_gem')
答案 1 :(得分:1)
您还可以就相对路径结构达成一致吗?你可以做点什么
gem "my_gem", :path => '../../apps/my_gem/'
我个人总是使用path
来开发本地的gem,但我总是将git引用推送给我的同事(因为这也意味着我正在开发的代码 - gem,已经发布 - 至少推到回购网站。
gem "my_gem", git: 'git@github.com:username/my_gem.git'
在Gemfile.lock
(我们也推送到存储库)中,我们看到了修订版,以便在同事安装时或部署时我们获得相同的版本。