我有以下用于將檔案添加到 git 的腳本。我正在使用 tclsh 在 git bash 上運行它
proc git_add {file_ext file_type folder} {
try {
set results [exec git add $file_ext]
} trap CHILDSTATUS {results options} {
puts "Warning: No $file_type files update has been found in $folder"
}
}
puts "Files will be added to git now "
set path "src"
cd $path
git_add "*.vhd" "Project" $path
git_add "*.v" "Project" $path
git_add "*.sv" "Project" $path
當我嘗試運行腳本時,如果檔案有 LF 而不是 CRLF,它會發出警告并停止。
錯誤如下:
檔案將添加到 git now 警告:intel/fpgas/fpga_link2/rtl/prbstest.vhd 中的 LF 將被 CRLF 替換。該檔案將在您的作業目錄中具有其原始行結尾。
在執行“exec git add $file_ext”時
(程式“git_add”第 2 行)
從 "git_add *.vhd "VHD" $path" 中呼叫
如何解決?
uj5u.com熱心網友回復:
默認情況下,Tcl 將標準錯誤通道上的輸出視為錯誤。來自 git 命令的警告很可能出現在 stderr 上。不幸的是,這種情況不會產生可以通過try命令捕獲的有用錯誤代碼。因此,您需要使用on error子句捕獲一般錯誤,或者將-ignorestderr選項添加到exec命令以禁用此行為。
set results [exec -ignorestderr git add $file_ext]
uj5u.com熱心網友回復:
該命令在兩種exec情況下會引發錯誤:
- 如果管道(通常只是一個行程)以非零錯誤退出。
- 如果管道寫入標準錯誤并
exec捕獲它。
這是你遇到的第二種情況。您需要決定您希望該訊息發生什么。
一個簡單的選擇是重定向它,以便用戶可以在他們的終端中看到它。
proc git_add {file_ext file_type folder} {
try {
set results [exec git add $file_ext 2>@stdout]
} trap CHILDSTATUS {results options} {
puts "Warning: No $file_type files update has been found in $folder"
}
}
這個 (the 2>@stderr) 將它重定向到 Tclstdout通道(只要有 OS 檔案描述符,任何通道都可以)。
如果您用于open |啟動管道并可以訪問其輸入和/或輸出,則在您close使用通道時會引發錯誤。exec大約是這樣(除了更多的錯誤處理并且它是用 C 撰寫的):
proc exec args {
set f [open |$args]
set data [read $f]
close $f
return $data
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/438259.html
上一篇:如何安全地在master中gitrebase提交歷史
下一篇:撤消git-lfs中的本地更改
