【问题标题】:Capistrano bringing deleted git files to releaseCapistrano 将已删除的 git 文件发布
【发布时间】:2013-03-28 00:06:58
【问题描述】:

我正在使用 Capistrano 进行部署,并使用 git 作为我的版本控制。

当我执行 cap deploy:update 时,它​​会将不再位于 master 中的已删除文件带到 /release/bla 文件夹中。

我不希望删除这些文件,因为我将来可能需要检查它们,而且我不希望 Capistrano 在我的版本中使用它们。

我有什么选择?

-- 根据下面@LeeHambley 的回复,我对git commit -a 的工作方式存在误解。 git commit -a 从当前 master 中删除文件,但不删除它们的历史记录。您可以在下面以@LeeHambley 的详细信息获取他们的历史记录。

【问题讨论】:

    标签: ruby-on-rails git capistrano


    【解决方案1】:

    听起来应该将它们添加到您的 .gitignore 以便 Git 不会触及它们,然后您可以轻松地手动上传它们一次,或者在每次部署时对它们进行符号链接。

    通常,这将通过将它们上传到共享中来完成:

    shared $ tree
    .
    └── config
       └── database.yml
       └── system
          └── uploads
    

    然后人们编写任务以将它们符号链接到版本中:

    after 'deploy:symlink' do
      %w{database system}.each do |path|
        run "ln -s #{shared_path + path} #{latest_release + path}"
      end
    end
    

    这样,也可以在 gitignore 中添加以下几行:

    /config/database.yml
    /system/uploads
    

    这意味着它们将不再由 Git 管理,您团队中的每个开发人员都将拥有自己的这些文件的副本,并且必须在服务器上手动创建一次,然后是 Git,或者Capistrano 不会再惹他们了。

    关于“我将来可能需要检查它们” - 我建议您可以将 thefile.yaml.example 提交到存储库,并记录新安装的过程,以使您的开发人员的生活更轻松。

    当您将文件添加到.gitignore 时,它们也需要从存储库中删除,这不会删除文件的历史记录,但会从当前头中删除。如果它很重要,您总是可以通过git log ./path/to/any/file/even/if/it/does/not/exist.anymore 获取文件的历史记录。更明智的做法可能是使用git mv 将文件从其现有位置移动到{oldname}.sample,因此历史记录将被传输到.sample 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2012-07-09
      • 2014-09-06
      • 2012-08-11
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多