Mam problem z tym skryptem Basha, który piszę. Próbuję zastosować krok 3 z this procedure from Github documentation, aby usunąć wszystkie pliki z historii naszych repozytoriów z naszej historii git. Na przykład, jeśli .gitignore ignoruje .txt, chcę usunąć wszystkie .txt z historii. I tak dalej dla każdej linii .gitignore.Nie można użyć skryptu bash do usunięcia plików z historii git
Jestem w stanie użyć symbolu wieloznacznego w przykładowym pliku. Więc mogę uruchomić następujące usunąć wszystkie pliki .txt:
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.txt' --prune-empty --tag-name-filter cat -- --all
więc starałem się zrobić skrypt bash, aby zrobić to samo.
Zrobiłem prosty plik .gitignore przetestować to z, jak następuje:
#foo
*.txt
*.docx
Mój skrypt wygląda następująco:
#!/bin/bash
s1="#"
str1="'git rm --cached --ignore-unmatch "
str2="'"
cat .gitignore | while read line
do
if [[ $line == *"$s1"* ]]
then
echo #skip
else
str3=$str1$line$str2
git filter-branch --force --index-filter $str3 --prune-empty --tag-name-filter cat -- --all
fi
done
Jednak to powoduje następujące dane wyjściowe:
fatal: bad revision 'rm'
fatal: bad revision 'rm'
(jeden raz dla każdej linii pliku .gitignore)
0.123.Co zrobiłem źle?
Podaj swoje zmienne! – Biffen
Nie można umieszczać złożonych poleceń w ciągu znaków. Nie próbuj. http://mywiki.wooledge.org/BashFAQ/050 Zwłaszcza, że nie możesz poprawnie wycenić cytatów. –
Polecenie, którego używam, zawiera pojedyncze cudzysłowy. Kiedy po prostu próbowałem uruchomić polecenie i dodać do niego linię $, uruchomione polecenie zawierało "git rm --cached --ignore unmatch $ line" zamiast zawierać zawartość $ line. – Jake