[解決済み] Subversion の "use-commit-times" に相当する Git の機能は何ですか?
質問
私のローカル システムとサーバー上のファイルのタイムスタンプを同期させる必要があります。これを実現するには サブバージョン を設定することで、実現できます。 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 プラグインに取り組んでいて、文字通り仮想ディレクトリを表示させることができました。 すべて あなたの枝
と、ファイルのタイムスタンプでゲームをするよりも、上記のどれかがより良い代替案であると確信しています。
ライナス
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] Git のブランチの一覧を最新のコミット順に表示するにはどうしたらよいですか?
-
[解決済み] Gitのプッシュを正しく強制する方法は?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルリポジトリのブランチをリセットして、リモートリポジトリのHEADと同じにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefinedmaster -> master (non-fast-forward) と git ! [拒否] master -> master (フェッチファースト)
-
Note: Git prompts このリポジトリで別の git プロセスが実行されているようです ....
-
[Gitラーニングノート】Gitのコンフリクト:マージする前に変更をコミットするかstashする。
-
fatal: パス仕様 'readme.txt' がどのファイルにもマッチしなかった Solution
-
[解決済み] キーフィンガープリントが原因でHerokuにプッシュできない
-
[解決済み] GitHubで2つのブランチの差分を取るには?
-
[解決済み] なぜgit AuthorDateはCommitDateと違うのですか?
-
[解決済み] SourceTreeを使用して、ビットバケット上にレポを作成せずに、ローカルレポをビットバケットにプッシュするにはどうすればよいですか?
-
[解決済み] CVS から Git への移行: $Id$ 相当?
-
[解決済み] gitは "サイレントモード "で動作しますか?