1

Capistrano を使用してデプロイし、git をバージョン管理として使用しています。

cap deploy:update を実行すると、マスターに存在しなくなった削除済みファイルが /release/bla フォルダーに移動します。

これらのファイルは将来チェックする必要があるかもしれないので削除したくありませんが、Capistrano が私のリリースでそれらを使用することも望んでいません。

私のオプションは何ですか?

-- 以下の @LeeHambley の回答によると、どのようにgit commit -a機能するかについて誤解がありました。git commit -a は、現在のマスターからファイルを削除しますが、履歴は削除しません。以下の@LeeHambleyの詳細として、その履歴を取得できます。

4

1 に答える 1

0

Git がそれらに触れないように、それらを追加する必要があるように.gitignore思えます。その後、手動で簡単にアップロードしたり、展開するたびにシンボリックリンクを作成したりできます。

通常、これは共有にアップロードすることによって行われます。

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 によって管理されなくなることを意味し、チームの各開発者はそれらのファイルの独自のコピーを持ち、手動でサーバー上に一度作成する必要があります。二度と彼らを台無しにしないでください。

「将来的にチェックインする必要があるかもしれません」については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 に答える