![](/img/trans.png)
[英]git diff on two remote servers (outside git git --no-index)
[英]Git merge file content outside of a repo (--no-index)
git diff
命令(帶有--no-index
標志)可以很好地比較兩個文件,無論這兩個文件是否包含在 Git 存儲庫中。
例子
$ git diff --no-index -- filea fileb
// shows diff between filea and fileb
題
如果內容不是 Git 存儲庫的一部分,是否也可以使用 Git 有選擇地“合並”(即git add
)內容從一個文件到另一個文件? 基本上就像一個git add -p
但不是從工作目錄到索引,而是從fileb
到filea
。
我覺得所有基本構建塊(管道命令)都應該可用。 可能涉及format-patch
和/或apply
?
$ <command> filea fileb
// wanted: interactively choose patches/hunks from fileb and apply them to filea
git diff --no-index
是相當多的只是一個普通的diff
,如果你想跨越任意文件申請變更帥哥,使用像一個普通的合並工具vimdiff
-這是更難從區分vimdiff
作為一個Git合並工具,因為它是同樣的事情。
git add
用於向存儲庫添加內容,您不是在工作樹的兩條路徑上工作,而是在工作樹的單個路徑上工作,並且在該路徑上編入索引的任何內容。 特別是,您無法選擇使用兩個不同的名稱。
但是只有當你沒有明確地告訴它它們在哪里時,Git 本身才會找到它的工作樹(和 repo、對象和索引......)。 如果您在某處有filea
的快照,例如在/path/to/filea
,您可以
git --work-tree /path/to add -p filea`
並且 git 會很filea
從該路徑的filea
添加到索引中注冊的filea
內容。
git add -p
命令是——或者至少是1——一個大的 Perl 腳本。 要查看它,請找到“核心”目錄:
git --exec-path
它將打印類似/usr/lib/git-core
或/usr/local/libexec/git-core
。 這是各種 Git 內部二進制文件和腳本所在的地方。
在打印出的任何目錄中,查找git-add--interactive
。 這是或曾經是git add -p
代碼。
這個 Perl 程序運行 Git diff 和 apply 命令,並且應該相對容易修改以使其執行您想做的事情。 請注意,這用於所有git add -p
、 git reset -p
和git checkout -p
,這就是為什么它有近 2000 行長。
Git 項目人員正在重寫所有這些,以使您無法修改。 :-)呃,那就是,讓它用C編寫的走快-你仍然有來源,而且還可以修改它所有你喜歡,但作為一個C程序,這將是更難的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.