6

私は自分のプロジェクトのドキュメントを生成するためにヤードを使用しています。ドキュメントは生成できるので、実際にバージョン管理する必要はありませんが、実際のドキュメントでコード(コメント)の変更の影響を簡単に確認できるため、バージョン管理を行うことにしました。

問題は、ヤードがドキュメントを生成するたびに、各ファイルの先頭の日付が変更され、すべてのファイルが変更されたと見なされることです。

ファイルが変更されたかどうかを検出するためにそれらの行を無視するようにgitに指示する方法、またはファイルが同一である場合にファイルを再生成しないようにyardを構成する方法はありますか?

ありがとう

アップデート

日付が変わってしまったらファイルをきれいにするスクリプトなどができることはわかっています。だから私の質問は、Gitの方法があるということです。つまり、diffドライバーについてわざわざ読んだり、クリーンなスクリプトを実行したりする必要があります。

クリーニングパスに向かっている場合は、gitフックを使用するか、ドキュメント生成に統合する方がよいでしょう。

最終的に、生成されたドキュメントの特定のコミットによる変更を追跡する他の方法に興味があります。

私は自分の問題が何であるか(そしてなぜ私が必要のないものをバージョン管理しようとしているのか)を実際に説明していないので、そこに行きます。

時々、コードの少しの変更がドキュメントを台無しにするので、ドキュメントに関するコミットの影響を見ることができるでしょう。

例:vimにmodelineを使用しています(vimに異なる情報を伝えるファイルの最初の行のコメント)

モジュールのドキュメントを含むファイルがあることを知っている

#vi: my vim setting 
# Documentation of module A
module A
  .... some code

end

そしてどこか他の場所で私はこのモジュールを使用します

#vi : my vim setting

           ( 2 blank lines)
module A
   .... some different code
end

その時点で、すべてが正常であり、AのドキュメントはになりますDocumentation of module A。ただし、誰か(私のような)が最後のファイルの空白行を削除して1つだけ残した場合(はい、モードラインとコードの間に2行の空白行を入れます)、ヤードはモードラインがモジュールAのドキュメントであると考えますvi : my vim setting

問題は、すべてのページを確認する以外に、ドキュメントが台無しになっていることを検出する方法がないことです。gitを使用すると、何が変更されたかをすばやく確認して確認でき、いつ変更されたかを確認することもできます(これは重要です。変更された理由を理解できるためです)。

4

6 に答える 6

3

直接的な答えではなく、要素のみ:

  • git diff-G特定の正規表現に一致するパッチのみを保持するオプションがあります。日付変更線に一致する行を除外するフラグはないようですが、日付変更線以外のものを保持する正規表現を構築するのに十分な想像力があるかもしれません。
  • diffにはそのようなオプション ( diff -I) があるので、git によって生成された diff を diff にフィードする方法を理解できれば、問題ありません。
  • meldはグラフィカルな diff ビューアで、git で十分に機能します -- たとえばmeld dir/、プロジェクトのディレクトリを呼び出すと、そのディレクトリとの違いがあるすべてのファイルを表示するウィンドウが開きますHEAD-- また、正規表現を使用して特定の行を無視できます ([編集] > [設定] > [テキスト]フィルタ)。Linuxディストリビューション用にパッケージ化されており(少なくともUbuntu用)、WebサイトではMacOS XおよびWindowsでも実行できると主張しています(私は試していません).
  • git と統合されている利用可能なすべての difftools を試したわけではありませんが、おそらく同様の機能を提供しています。
于 2012-07-06T09:43:50.473 に答える
2

ファイルに日付がまったく含まれていないだけで十分ですか?

ヤード固有のソリューション(ただし、git固有ではありません)。実際にこれらの日付を使用しない場合は、ヤードを取得して、そもそも日付を生成しないようにします。

に空のファイルを作成し、customtemplates/default/layout/html/footer.erbそれをテンプレートに含めます。

  • コマンドラインを使用する

    yardoc --template-path ./customtemplates
    
  • Rakefileを使用する

    YARD::Rake::YardocTask.new do |yardoc|
        yardoc.options = ["--template-path", "./customtemplates"]
    end
    

(または、Yardへの確認が必要な場合は、customtemplates/default/layout/html/footer.erbファイルに次のように入力できます)

<div id="footer">
     Generated by <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>.
</div>

または、会社のロゴやその他の情報を使用して、独自のフッターを挿入することもできます。

于 2012-07-12T02:09:44.507 に答える
2

それをしないでください

ソースから再生成できるアセットはバージョン管理しないでください。あなたが経験しているまさにその理由のためにそれは悪い考えです:

  1. あなたの履歴はあなたが気にしない変更を追跡します。
  2. コミット履歴に関係のない些細な変更を無視するように努力する必要があります。
  3. オンデマンドで再生成できるデータにリポジトリスペースと処理時間を浪費します。

何をバージョン管理し、何を除外するかについての関連する議論については、https://stackoverflow.com/a/10855342/1301972を参照してください。

とにかくやったら...

ドキュメントファイルをコミットする前にタイムスタンプを削除するカスタムクリーンフィルターをGit(またはYARDを更新するたびに実行されるシェルスクリプトまたはRakeタスク)で作成できます。例えば:

# Tested with: GNU findutils 4.4.2, GNU sed 4.2.1
find doc -type f -iname \*html -exec sed -i '/id="footer"/,/\/div/ d' {} +

これにより、YARDドキュメント内のすべてのフッターが削除されるため、これらの行を履歴にコミットすることはありません。これにより、特定の問題に対処できます。

于 2012-07-10T12:01:18.967 に答える
2

私は庭に慣れていませんが、git にファイルの一部を無視させる方法はありません。

最も簡単な解決策は、ビルド プロセスを変更して、生成されたファイルからデータを削除するカスタム スクリプトを実行するか、日付のみが変更された場合は git-diff をチェックし、その場合は日付の変更を元に戻すことです。

ただし、生成されたコード/ファイルをまったくバージョン管理しないと、はるかにクリーンになります。

于 2012-07-05T14:43:41.523 に答える
1

私はほとんど同じ問題を抱えています。ドキュメントではなく、IDE が日付と時刻を設定するソース ファイルが変更されました。保存するたびに。

要件は、コミット前にこの日付と時刻を「きれいに」持つことでした。つまり、秒ではなく、分を 15 に丸める必要があります。

私が考える最良のアプローチは、コミットする前にコードをクリーンアップするための小さな git コマンドを作成することです。プラグイン。名前を付けてgit-cleanup配置しましたc:\Program Files (x86)\Git\libexec\git-core(私はWindowsを使用しています)。

だから今、実行する前git commitに実行git cleanupしていて、すべての仕事をしています。実際、一気に実行することも可能だと思いますgit cleanup && git commit -a -m "Commit message"。または、このコマンドのカスタム エイリアスを作成します。

rubyこの小さなスクリプトの作成に使用しました。ただし、選択した言語を使用できます。Git はこれを許可します。

于 2012-07-06T09:49:23.843 に答える
0

更新された質問のモードライン ソリューション

問題がフッターに格納された日付ではなく、実際にVIM modelinesである場合は、pre-commit フック (クライアント側) または pre-receive または post-receive フック (サーバー側) を使用して、直後の改行をチェックできます。モードライン。たとえば、GNU sed を使用すると、次のようになります。

sed -r '/^#[[:space:]]+vim?:/ {N; /\n[^\n]/q1}'

フックは、差分やエラー メッセージを表示したり、終了ステータスに基づいて他のアクションを実行したりできます。重要なことは、モードラインが後続のドキュメント ブロックから適切に分離され、YARD によって適切に無視される必要があることです。

于 2012-07-12T13:10:21.497 に答える