我不知道這是一個bash問題或git問題,但我完全難住。Git過濾分支,變量和bash
我有以下bash腳本:
#!/bin/bash
FILE=testfile.c
sha1=`git log --pretty=oneline --branches -- $FILE | tail -1 | cut -f 1 -d' '`
sha2=044ec18c3c4efe9ef44daf7479b9f71d89720690
echo "sha1=.$sha1."
echo "sha2=.$sha2."
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch '"$FILE"'' -- ${sha1}^..
從而未能與下面的輸出:
$> ./script.sh
sha1=.044ec18c3c4efe9ef44daf7479b9f71d89720690.
sha2=.044ec18c3c4efe9ef44daf7479b9f71d89720690.
fatal: ambiguous argument '044ec18c3c4efe9ef44daf7479b9f71d89720690^..': unknown
revision or path not in the working tree.
Use '--' to separate paths from revisions
但如果我只是通過在git filter-branch
線使用sha2
代替sha1
改劇本,它的工作原理和產生如下輸出:
$> ./script.sh
sha1=.044ec18c3c4efe9ef44daf7479b9f71d89720690.
sha2=.044ec18c3c4efe9ef44daf7479b9f71d89720690.
Rewrite 044ec18c3c4efe9ef44daf7479b9f71d89720690 (1/1139)rm 'talairach_avi/SVIP_Child_Comp_N24_as_orig.4dfp.img'
Rewrite d30e314d7b6e2f62fa26e62dc83fc5083b92085b (2/1139)rm 'talairach_avi/SVIP_Child_Comp_N24_as_orig.4dfp.img'
Rewrite f2897cd0d17b75de70aca1baa70e6cb40243d0a1 (3/1139)rm 'talairach_avi/SVIP_Child_Comp_N24_as_orig.4dfp.img'
...
sha1
和sha2
具有完全相同的值。爲什麼使用硬編碼的sha2
變量工作,但分配的變量sha1
不起作用?我怎樣才能使它與sha1
一起工作?我試過每一個可能的單/雙引號排列/組合,但無濟於事。
我非常感謝在此事上的任何投入。謝謝。
EDIT1: 雖然單獨回波語句出現相同的,通過od
管道回波的輸出產生不同的輸出:
$> echo $sha1 | od -x
0000000 5b1b 3333 306d 3434 6365 3831 3363 3463
0000020 6665 3965 6665 3434 6164 3766 3734 6239
0000040 6639 3137 3864 3739 3032 3936 1b30 6d5b
0000060 000a
0000061
$> eco $sha2 | od -x
0000000 3430 6534 3163 6338 6333 6534 6566 6539
0000020 3466 6434 6661 3437 3937 3962 3766 6431
0000040 3938 3237 3630 3039 000a
0000051
EDIT2:解決如通過下面的評價中可以看出問題已通過git配置爲彩色輸出解決。取消設置此配置可解決問題。 git config --global color.ui false
我會假設它會與非打印字符和引用有關 - 嘗試在雙引號(sha1 =「'...」等;)中包裝兩個賦值,以及在最終命令' - 「$ {sha1}^..」'。看看是否改變了一切。 – zebediah49
@ zebediah49我嘗試完全按照你的建議,並且在使用'sha1'而不是使用'sha2'時仍然失敗:( –
我的第一個目標也是nonprintables。通過'od -x'管道回顯輸出,看看結果仍然是相同的。 – Harald