2013-03-28 26 views
1

我正在使用Capistrano進行部署,並使用git作爲我的版本控制。Capistrano將已刪除的git文件發佈到

當我執行cap deploy:update時,它會將不再使用主文件的已刪除文件引入到/ release/bla文件夾中。

我不想刪除這些文件,因爲我將來可能需要檢查這些文件,但我也不希望Capistrano在我的發行版中使用它們。

我有什麼選擇?

- 根據@ LeeHambley的迴應,我對git commit -a的工作方式產生了誤解。 git commit - 從當前主文件中刪除文件,但不刪除它們的歷史記錄。您可以在下面獲得他們的歷史@LeeHambley的詳細信息。

回答

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文件。

相關問題