2017-03-06 101 views
0

我正在使用Windows 7,32位git版本2.12.0.windows.1。將git包創建輸出重定向到日誌文件

我正在寫一個簡單的批處理腳本來將git倉庫捆綁到一個獨特的文件中。我想將命令的輸出重定向到一個日誌文件,然後我可以檢查,但是我遇到了一個我無法打開的行爲。

在任何git倉庫,如果我運行下面的命令:

git bundle create bundle.out --all > bundle.log 

我期望命令的輸出重定向到文件bundle.log。但是,運行該命令後,文件bundle.log已創建,但它是空的,輸出顯示在控制檯上,就好像沒有應用重定向一樣。因此,我想也重定向錯誤流:

git bundle create bundle.out --all 1> bundle.log 2> error.log 

此外,在這種情況下,包被創造,這兩個文件bundle.log創建error.log中,但它們都是空的。奇怪的是,控制檯上沒有顯示輸出。所以,我的問題是,這個輸出在哪裏消失?

爲了便於比較,我試着用另一種「類似」的命令,那就是:

git bundle verify bundle.out 1> stream1.log 2> stream2.log 

Applyed之前創建的包,並將該行爲是一個我所料:stream1.log包含列表和參考文獻stream2.log包含「bundle.out可以」。

我在做什麼錯?我如何實現我的目標,即將git bundle create的輸出重定向到日誌文件?

+0

[This answer](http://stackoverflow.com/a/41859873/1529709)似乎解釋了行爲... – zb226

回答

0

git bundle將其輸出打印到stderr流。但是,只有當stderr流是TTY,我纔會這樣做。即基本上是一個互動控制檯如果不是,但某些管道或文件,則不會打印任何內容。

您可以通過使用script實用程序來欺騙此檢查,該實用程序將終端會話或命令記錄到文件中。所以在你的情況下做

script --return --command 'git bundle create bundle.out --all' bundle.log 

而你將在文件bundle.log輸出。如果你再看看它,你也會看到爲什麼這個支票在那裏。 (擾流板:這是定期更新,覆蓋進度信息,這當然不能正常工作,如果你沒有一個TTY看這個。)

免責聲明:這個答案適用於* nix系統也適用於Windows上的Cygwin。我不知道有關Windows的普通Git,script實用程序在默認情況下可能不可用,您可能必須搜索Windows端口或等效項,或者使用Cygwin來執行此操作。

+0

謝謝,我不知道TTY的「要求」。當然'腳本'不存在於一個普通的Windows環境中,但至少現在我知道了。 – Shalen

相關問題