見方 多言語実装のためのgitのベストプラクティスは何ですか?




github 便利 ツール (2)

大変な電話です。 おそらく「最善」とは、個人的な好みや手元にある状況の詳細によって決まります。

一方で、各ディレクトリは技術的には他のディレクトリと「関連」していません。 それらは同じアルゴリズムを実装していますが、他のどれにも依存していません(したがって、純粋なソースコードの観点からは、それらは無関係です)。 通常、無関係なものは別々のリポジトリに残すのが最善です(Craig McQueenの回答で特定されている理由のため)。

ただし、これら同じアルゴリズムを実装しているため、アルゴリズムを変更する必要がある場合は、すべてのディレクトリに非常に類似した変更を加える必要があることがわかります。 そのような場合は、すべての変更を単一のコミットとして行うことが理にかなっている可能性があります。 アルゴリズムが「仮想ディンホッパー」をサポートする必要があると決めたとしましょう。 あなたはそれぞれのディレクトリにそのサポートを追加して、メッセージが「仮想ディホッパーのサポートを追加する」である単一のコミットをするでしょう。 後で仮想dinglehopperのサポートを追加するのは悪いことだと判断した場合、単一のコミットだけを元に戻すことができるので、これは素晴らしいことです。 別の方法は、3つの別々のリポジトリに3つの別々のコミットを行い、その後3つの別々のリポジトリから3つの別々のコミットを元に戻すことです。

繰り返しますが、それは厳しい電話です。 明確で、厳格な規則があるとは思わない。

そのため、私はアルゴリズムの異なる言語実装(Python、Javaなど)であるプライベートのgitリポジトリをいくつか持っています。 各実装は機能的に同一で、同じステップを実行し、同じ出力を与えます。 現在、これらは別々のリポジトリですが、言語を示すディレクトリを使用して、これらを1つのリポジトリに統合するべきではないかと思いました。

  master
     - java
     - python
     - ruby

履歴を保存するためにgit-repo combineコマンドを使うことができたので、それは問題ではありません。 これに関するベストプラクティスについては興味がありました。


Mercurialについても、 CPython実装したいアルゴリズム( COBS )についても同じ質問がありました。

最終的に私はそれを別々のリポジトリに分割することにしました(たとえPythonの実装が普通のCの実装と似たコードを持ったCの拡張を含んでいたとしても)。 私の推論は次のようになりました。

  • 私は、実装の独立したバージョン番号と独立したリリースを持ちたかったのです。
    • git describeは、最新の注釈付きタグに基づいてバージョンを識別するための優れた機能です。 リポジトリの実装が1つだけなので、 git describe使用法は簡単です。 しかし、別々のバージョン番号を持つ異なる実装が1つのリポジトリにある場合、 git describe使用はより複雑になり、-- --matchオプションを使用して特定の接頭辞を持つタグに限定する必要があります。 例git describe --match "python*"
  • Pythonモジュールが通常編成される方法( Pythonモジュール・パッケージングのベスト・プラクティス )では、Python実装を分離して自己完結型にしておくことが私にとっては意味がありました。
  • 他のすべてが同じで、私はよりきめ細かいモジュール性を好む傾向があります。






github