我正在嘗試爲我的項目創建一個修補程序。
本質上,我有一個包含許多文件和子目錄的目錄,我的修補程序只應用於各個子目錄中的文件子集。 我不能在整個原始vs修改目錄上使用diff,因爲還有其他文件會受到diff的影響。有沒有使用diff命令爲文件的子集創建補丁的自動化方式?僅在目錄/子目錄中的選定文件上使用diff
顯而易見的方法是簡單地比較所有單個文件,然後使用複製/粘貼將它們聚合到單個文件中,但是是否存在自動執行此操作的方法?如果不是這樣做的首選方式是什麼?
我正在嘗試爲我的項目創建一個修補程序。
本質上,我有一個包含許多文件和子目錄的目錄,我的修補程序只應用於各個子目錄中的文件子集。 我不能在整個原始vs修改目錄上使用diff,因爲還有其他文件會受到diff的影響。有沒有使用diff命令爲文件的子集創建補丁的自動化方式?僅在目錄/子目錄中的選定文件上使用diff
顯而易見的方法是簡單地比較所有單個文件,然後使用複製/粘貼將它們聚合到單個文件中,但是是否存在自動執行此操作的方法?如果不是這樣做的首選方式是什麼?
通常情況下,在這種情況下,補丁文件中感興趣文件的大部分路徑除了最上面的組件外都是相同的。例如:
diff -u original/some/path/foo.c mine/some/path/foo.c
您應該創建要爲其創建修補程序的文件的完整列表,但會丟失最上面的路徑組件。使用該列表,您可以簡單地將其提供給一個循環,該循環將每個文件名添加到diff
命令中,並將文件的頂部添加到其中。
$ cat changed_files
some/path/foo.c
some/other/path/bar.c
$ while read f ; do diff -u original/$f mine/$f ; done <changed_files> patch_file
一個很好的工具是rsync
,它允許您「將文件從一個目錄」同步「到另一個目錄。通過使用--dry-run
選項,您可以查看哪些文件不同。如果你不在意區別是什麼,這是一個很好的選擇。