1

一部の(Mac OS)ファイルのファイルタイプはTEXTである必要があります。私は拡張機能について話しているのではなく、拡張属性について話している。その機能はgitによって失われます。

そのため、特定の拡張子を持つファイルに対してSetFileコマンドを実行する必要がありますが、その方法がわかりません。これはチェックアウト方向でのみ行う必要があります。コミット中に何も保存する必要はありません。

Rubyスクリプトをスマッジフィルターとして見てきましたが、ファイル名を取得する方法がわかりません。これは正しいアプローチですか、それともフックの方が良いでしょうか?

(ファイルタイプの必要性を制御することはできません。これはレガシーシステムであり、動作方法を変更することはできません。)

4

1 に答える 1

0

差出人git hooks --help

post-checkout
   This hook is invoked when a git checkout is run after having updated
   the worktree. The hook is given three parameters: the ref of the
   previous HEAD, the ref of the new HEAD (which may or may not have
   changed), and a flag indicating whether the checkout was a branch
   checkout (changing branches, flag=1) or a file checkout (retrieving a
   file from the index, flag=0). This hook cannot affect the outcome of
   git checkout.

したがって、気になる特定の拡張子を持つワークツリー内のすべてのファイルに対して実行されるチェックアウト後のフックを作成し、SetFileそれらを呼び出すことができます。これは、変更されていないファイルに対して操作を再実行し、後はまったく実行されないため、完全ではありませんがgit reset --hard、ニーズには十分な場合があります。

名前の付いたすべてのファイル(他のファイルは除く)に対してこれを行うチェックアウト後のフック*.txtは非常に簡単です。

#! /bin/sh
git ls-files -z -- '*.txt' | xargs -0 SetFile -t TEXT

-zとは-0、ハードケースのパス名(たとえば、埋め込みスペースを含むパス名)に対してこれを機能させます。

于 2012-04-07T09:04:39.790 に答える