我使用這個混帳命令創建中的特定修改過的文件的歸檔承諾:通過批處理文件創建GIT修改過的文件的歸檔
git archive -o update.zip HEAD $(git diff --name-only COMMITID^)
其中的commitid是提交的我的ID正在尋找檔案。這從命令行工作正常,但我想從批處理文件運行它。以下是我正在使用的批處理文件的內容:
git archive -o update.zip HEAD $(git diff --name-only %1^^)
其中%1是通過SourceTree傳入的提交ID。我遇到的問題是,從一個批處理文件運行時,此命令將返回以下錯誤:
error: unknown option `name-only'
我猜可能有一些字符轉義問題去,但我無法找到什麼特別斷。
我該如何編寫git命令,以便它能從批處理文件中工作?
UPDATE
我試圖消除唯一--name選項,並通過SourceTree試圖批處理腳本時收到以下錯誤:
fatal: path not found: $(git
希望這有助於縮小範圍可能是什麼回事。
進一步更新
原來我的語法是錯誤的,從一個特定的提交抓只修改過的文件,但使用msandiford的答案,我想出了這個批處理文件腳本,完美的作品:
setlocal enabledelayedexpansion
set output=
for /f "delims=" %%a in ('git diff-tree --no-commit-id --name-only -r %1^^') do (set output=!output! "%%a")
git archive -o update.zip HEAD %output%
endlocal
如果你在你的批處理文件的'git archive'命令前面加了一個'echo',它會告訴你你期望的結果嗎? – Mark
是的,它似乎在回聲輸出中格式正確。 – hereswhatidid
確保您的命令中沒有奇怪的字符。發生在我身上的是我在命令中有「隱形」控制字符... – vonbrand