簡體   English   中英

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但不是從工作目錄到索引,而是從filebfilea

我覺得所有基本構建塊(管道命令)都應該可用。 可能涉及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 -pgit reset -pgit checkout -p ,這就是為什么它有近 2000 行長。


Git 項目人員正在重寫所有這些,以使您無法修改。 :-)呃,那就是,讓它用C編寫的走快-你仍然有來源,而且還可以修改它所有你喜歡,但作為一個C程序,這將是更難的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM