2017-12-21 28 views
1

私はCプロジェクトのソース(この場合はLinuxカーネル)とMakefileを持っています。.oファイルまたはビルドバージョンコントロールのベストプラクティスは何ですか?

私は修正を加えて私は枝を切り換えてしまいました。そして、これらのオブジェクトファイルが関係しているコミットを忘れてしまいました。

ビルドプロセスでバージョン管理を自動的に行うことはできますか?例えば

(ちょうど私が良いワークフローかもしれないと思う、多分それは愚かだ):

  1. フォースmake

  2. が自動的にビルドのバージョンを保存する前に、私はgitの作業spcaceがクリーンであることを確認してください。 1つのビルドをオブジェクトファイルとソースファイルの両方に関連付けます。

  3. 私は最新(ソースコードの作業スペースと比較して)である.oファイルを知ることができ、任意のビルド

  4. をチェックアウトすることができます。 git status

しかし、すべてのほとんどのように、ソースコードのgitツリーが干渉することはできません。

+0

これはあなたのMakefileで行うことができます。 'クリーン'は非常に一般的なターゲットです。ターゲットを追加して、gitコマンドを実行して、メインターゲットの終了後にすべてのファイルを追跡することができます。 – ElpieKay

+0

私は間違っているかもしれませんが、gitがあなたのソースファイルの1つを変更すると、その変更日が変更されるので、Makefileが正しく書かれていると 'make'がそれを再構築すると思います。 – Tim

+0

あなたは問題を解決するのに役立つ答えを得ましたか?はいの場合は、回答としてマークすることができます。また、同様の質問をした他の人にとっても有益です。 –

答えて

1

.oファイルはCコンパイラ(Cプロジェクトの出力ファイル)には、バージョン管理にGitのレポで.oファイル不要だによって生成されたオブジェクト・ファイルであるため。

gitリポジトリのソースコード(CプロジェクトやMakefileなど)を管理するだけで済みます。

出力ファイルについては、.gitignoreでそれらを無視すべきである:

touch .gitignore 
echo **/*.o >> .gitignore 
git add . 
git rm **/*.o --cached 
git add . 
git commit -m 'ignore .o files' 
git push 
1

一般的な解決策は、それを識別するために、アーチファクトに情報を埋め込むことです。

例えば、コンパイラを制御する番号が-D parameter=valueの場合、それらを文字列に入れます。

const volatile static char build[] = "parameter PARAMETER has value " PARAMETER; 

あなたの缶は、呼び出し側にこの文字列を返すコードを持っている、またはあなたがちょうどあなたがそれに埋め込まれた情報を見ることがstringsまたはlessでバイナリを検査することができます。詳細については

、オブジェクトファイルについてDoes gcc have any options to add version info in ELF binary file?

1

ベストプラクティスはのgit - 無視するそれらをしている参照してください。

echo *.o >> .gitignore 

支店を持つビルドプロセスに関するベストプラクティスは、別々の実行時間の長いworktreesを持つことです

git clone -b branch1 master-repo project-b1 
git clone -b branch2 master-repo project-b2 
cd project-b1 
make 
cd ../project-b2 
make 

これらの作業ツリーのブランチを切り替えないでください。

関連する問題