1. ホーム
  2. git

[解決済み] Subversion の "use-commit-times" に相当する Git の機能は何ですか?

2023-01-02 12:07:33

質問

私のローカル システムとサーバー上のファイルのタイムスタンプを同期させる必要があります。これを実現するには サブバージョン を設定することで、実現できます。 use-commit-times=true とする。 を設定することで、各ファイルの最終更新時刻がコミットされた時刻になるようにします。

リポジトリをクローンするたびに、ファイルのタイムスタンプを、リポジトリをクローンしたときではなく、リモートリポジトリで最後に変更されたときに反映させたいのですが、どうすればよいですか?

Git でこれを行う方法はありますか?

どのように解決するのですか?

これが DVCS ("Distributed" VCS の意) にふさわしいかどうかはわかりません。

この大きな議論は、すでに 2007 (このスレッドを参照)

そして、Linus の答えのいくつかは、このアイデアにあまり乗り気ではありませんでした。以下はその一例です。

申し訳ありません。単純な "make" になるようなものに datestamp を戻すことがいかに WRONG か、お分かりになりませんか? ミスコンパイル のようなものであることがわからないのであれば、私はあなたが言っている「間違っている」の定義がわからないのです。

それはwrongです。

STUPIDです。

そして、それは実装することが全く不可能です。


(注:小さな改善です。 チェックアウト後、最新ファイルのタイムスタンプはもはや変更されません。 (Git 2.2.2+、2015年1月)。 "git checkout - how can I maintain timestamps when switching branches?" .)


長い回答でした。

これが一般的なことであれば、代わりに複数のリポジトリを使用する方がずっと良いと思います。

<ブロッククオート

タイムスタンプをいじることは一般的にはうまくいきません。それは、"make" が本当に悪い方法で混乱し、再コンパイルしないことを保証することになります。 十分な をリコンパイルする代わりに が多すぎる .

<ブロッククオート

Git では、quot; check the other branch out" を非常に簡単に、様々な方法で実行することができます。

以下のいずれかを行う些細なスクリプトを作成することができます(些細なものからよりエキゾチックなものまであります)。

  • 新しいレポを作成するだけです。
    git clone old new
    cd new
    git checkout origin/<branch>

<ブロッククオート

で、こうなります。古いタイムスタンプは古いレポで問題なく、新しいレポでは古いレポに全く影響を与えずに作業(とコンパイル)できます。

git clone" に "-n -l -s" フラグを使用すると、基本的にこの作業を瞬時に行うことができます。たくさんのファイル (たとえばカーネルのような大きなリポジトリ) に対しては、ブランチを切り替えるのと同じ速さにはなりませんが、作業ツリーの 2 番目のコピーを持つことは非常に強力です。

<ブロッククオート
  • 同じことをタールボールでやってもいい。
<ブロッククオート
    git archive --format=tar --prefix=new-tree/ <branchname> |
            (cd .. ; tar xvf -)

<ブロッククオート

は、スナップショットを取得するだけであれば、非常に高速です。

<ブロッククオート
  • 慣れる " git show に慣れてしまい、個々のファイルを見るだけになってしまいます。

    これは実際には 本当に で便利です。あなたはただ
<ブロッククオート
    git show otherbranch:filename

<ブロッククオート

をある xterm ウィンドウで実行し、別のウィンドウで現在のブランチにある同じファイルを見ることができます。特に、スクリプト可能なエディタ (GNU emacs など) でこれを行うのは簡単なはずで、基本的にこれを使用してエディタ内の他のブランチのための "dired mode" を持つことが可能なはずです。私の知る限り、emacsのgitモードはすでにこのようなものを提供しています(私はemacsのユーザーではありません)。

  • そして、仮想ディレクトリの極端な例として、少なくとも誰かが FUSE 用の git プラグインに取り組んでいて、文字通り仮想ディレクトリを表示させることができました。 すべて あなたの枝

と、ファイルのタイムスタンプでゲームをするよりも、上記のどれかがより良い代替案であると確信しています。

ライナス