1

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

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

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

我有哪些选择?

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

4

1 回答 1

0

听起来应该将它们添加到您的.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 文件中。

于 2013-03-28T09:46:08.763 回答