問題タブ [git-diff]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - diffをgit-diffのように機能させる方法は?
の出力フォーマットが好きですgit diff
。行間の変更の色と+
/-
表現は、GNUDiffよりも読みやすくなっています。
gitリポジトリの外でflaggit diff
を使用して実行でき、正常に動作します。ただし、再帰からファイルまたはサブディレクトリを除外するため--no-index
のオプションが欠落しているようです。--exclude
diff
両方の世界を最大限に活用する方法はありますか?( GNU差分 のカラーオプションと+
/-
フォーマットgit diff
とオプション)。--exclude
私は実験しましたcolordiff
が、それでも次の出力形式を好みますgit diff
git - Gitは、あるファイルから別のファイルへの1つの関数の移動を実際に追跡できますか?もしそうなら、どのように?
あるファイルから別のファイルに単一の関数を移動すると、Gitがそれを追跡できるという声明に何度か出くわしました。たとえば、このエントリには、「関数をあるファイルから別のファイルに移動すると、Gitは移動中のその単一の関数の履歴を教えてくれるとLinusは言っています」と書かれています。
しかし、私はGitの内部設計のいくつかに少し気づいており、これがどのように可能であるかわかりません。だから私は疑問に思っています...これは正しいステートメントですか?もしそうなら、これはどのように可能ですか?
私の理解では、Gitは各ファイルのコンテンツをBlobとして保存し、各Blobは、そのコンテンツとサイズのSHAハッシュから生じるグローバルに一意のIDを持っています。次に、Gitはフォルダーをツリーとして表します。ファイル名情報はすべてBlobではなくTreeに属しているため、たとえばファイル名の変更は、BlobではなくTreeへの変更として表示されます。
したがって、20個の関数を含む「foo」というファイルと5個の関数を含む「bar」というファイルがあり、関数の1つをfooからbarに移動すると(それぞれ19と6になります)、その関数をあるファイルから別のファイルに移動したことをGitはどのように検出できますか?
私の理解では、これにより2つの新しいblobが存在します(1つは変更されたfoo用、もう1つは変更されたbar用)。関数が1つのファイルから別のファイルに移動されたことを示すためにdiffを計算できることに気付きました。しかし、関数に関する履歴がfooではなくbarに関連付けられる可能性があるかどうかはわかりません(とにかく自動的ではありません)。
Gitが実際に単一のファイルの内部を調べ、関数ごとにblobを計算する場合(可能な言語を解析する方法を知っている必要があるため、これはクレイジー/実行不可能です)、これがどのように可能であるかがわかります。
それで...ステートメントは正しいかどうか?そしてそれが正しければ、私の理解に欠けているものは何ですか?
git - 「git diff --color」を実行しながら、大文字と小文字を区別しない git diff を実行するにはどうすればよいですか?
大文字と小文字git diff
を区別せずに行うことは可能git diff --color-words
ですか? または、実行中に外部差分プログラムを使用する必要がありgit diff --color-words
ますか?
(注: git diff case insensitive だけが必要な場合は、この質問 How to perform case insensitive diff in Git に進んでください)
git - git index からファイルのコンテンツを取得するにはどうすればよいですか?
ローカル リポジトリに既に追加されているファイルがあります。作業ツリーで変更したので、git status
変更されたファイルが表示されます。ファイルをステージングする前に、インデックスに保持されているファイルの内容を知りたいです。
私はそれを行う2つの方法を考えることができます:
- によって生成されたパッチを元に戻し
git diff
、作業ツリーのファイルに適用します - を使用
git checkout-index
し、一時ファイルをポイントして、そこからコンテンツを読み取ります
もっと簡単な方法はありますか?
git - git diff -Gを使用するにはどうすればよいですか?
一連の入力ファイルに対してテストするツールを実行する小さなテストスイートを作成しています。入力ファイルごとに、対応する出力ファイルがツールによって作成されています(どちらもXML形式です)。入力ファイルと出力ファイルはGitリポジトリにチェックインされます。
出力ファイルにはツールがコンパイルされた時間が含まれているため、出力ファイルは、テスト対象のツールによって再作成された後、確実に変更されます。
出力が変更されたかどうかを簡単に確認するために(ツールのソースを変更したとき)、ノードのコンテンツが変更されたかどうかを確認したいと思いますOutputFingerprint
(出力ファイルの関連部分のコンテンツの単純なハッシュ) 。
のマニュアルを読んで、私はオプションgit-diff
があることがわかりました:-G
-G<regex>
追加または削除された行が指定された<regex>と一致する相違点を探します。
残念ながら、-G
オプションの使用方法の例は提供されていません。
私の最初の考えは単に書くことでした
しかし、それは間違っています:
次の考えは、正規表現をスラッシュで囲むことでしたが、これも成功していません。
-G
また、との間にスペースを入れるだけでOutputFingerprint
は機能しません。
git diff
パラメータを指定せずに呼び出すと、次のように変更されます。
別の考えはを使用することgit diff -S".*OutputFingerprint.*" --pickaxe-regex
でしたが、これも成功していません。
git --version
git version 1.7.3.1.msysgit.0
それが適切かどうかを教えてください。
私が尋ねるgit diff --help
と、提供されたマニュアルは私に-G
オプションを示しています。
git diff -G
それで、誰かが私に正しく使用する方法の例を教えてもらえますか?
git - git でステージングされた変更の差分を表示する
重複の可能性:
ステージングされた変更を表示するにはどうすればよいですか?
git で保留中のステージングされた変更のみの差分を表示する簡単な方法はありますか? いくつかのファイルをステージングしましたが、ボタンを押す前にコミットしているものを最後に確認したいと思います。別のコミットに入れたいステージングされていない変更が他にもいくつかあるため、ステージングを解除し、 を実行してから、必要なgit diff
ファイルにページングすることは、それほど望ましいオプションではありません。
例:
foo.java
ステージを解除せずに、自分が変更したものを見たいだけです。
git - 「gitdiff」が十分に表示されない
マスターブランチと機能ブランチの違いを確認したいと思います。マスターから機能ブランチに多くのプルがあり、機能をマスターにマージした場合に追加される変更を確認したいと思います。
これは私の状況です:
私の問題はgit diff master feature
、コミット番号2しか表示されないようです。GitHubプルリクエストが表示するdiffをどのように確認できますか。これは、コミット1までずっと続くと思います。
git cherry
違いを見たいコミットが表示されていることに気づきました。
git - git を使用して 2 つのコミットから 1 つのファイルを比較する
どこかで壊れたファイルがあり、まだ修正されている最後のポイントを見つけました。
gitを使用して、2つのコミットから1つのファイルを比較する方法、または実際にこれを再生する最良の方法であるかどうかを知りたいです!!
git - リポジトリのクローンが 1 つだけの git 行末の問題
わかりました、gitリポジトリがあります。同じようなバージョンの git (ほぼ最新) を実行しているすべてのクローン。
- 'origin' は GitHub.com にあります
- さまざまな CentOS サーバーでのクローン、行末の問題は発生しません
- 私の Mac OS システム (cmd ライン経由で git を使用するか、Tower GUI を使用) でクローンを作成すると、行末の問題もありません..
しかし
- Ubuntu サーバー上の別のクローンでは、ファイルに変更を加えると、git-diff はファイル全体が変更されたと見なします
では、問題を解決するには、この 1 つの Ubuntu ボックスで git-config をどうする必要がありますか? この件に関するさまざまな記事(およびgit-configドキュメント)を読みましたが、決定的なワンヒット修正が何であるかは完全には明らかではありません..?
git - gitでdiffのタブ文字を強調表示しますか?
インデントにタブ文字を使用するコードをコミットしないようにしています。これは私が自分のコミットに適用しているソフトな制約です(現在、インデント文字の標準はありませんが、スペースの幅に不一致がないため、スペースを使用したいと思いますが、いくつか人々は幅4のタブと幅8のタブを使用します)。
このような制約を確認する最も簡単な方法は、コミットしようとするたびにgit diffの実際の出力を調べて、問題があるかどうかを確認することです。たとえば、私にとっては、デフォルトで末尾の空白が強調表示され、ウィンドウの改行も差分に表示されるため、誤って末尾の空白を含むコードをコミットしようとすると、これが通知されます。タブ文字をgitdiffにも表示させる方法はありますか?