Передача переменной в команду в git filter-branch (при уменьшении размера репо путем удаления старых двоичных файлов) - PullRequest
4 голосов
/ 20 января 2012

Я ищу способы уменьшить размер репо путем удаления бинарных файлов.Я пишу сценарий, который сделает это для меня, основываясь на http://help.github.com/remove-sensitive-data/

Кажется, у меня есть работающее решение, но я не могу передать параметр во вложенную команду git.Скрипт с жестко запрограммированным файлом работает:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch /*selenium-server-standalone-2.16.0.jar' --prune-empty -- --all 
git push origin master --force 
rm -rf .git/refs/original/ 
git reflog expire --expire=now --all 
git gc --prune=now 
git gc --aggressive --prune=now 
git status
git pull

это дает мне вывод

Rewrite f9a33e41dd6da4630773272ec18d194d14935a83 (10/10)rm 'bin/selenium-server-standalone-2.16.0.jar'
rm 'selenium-server-standalone-2.16.0.jar'

Ref 'refs/heads/master' was rewritten
Ref 'refs/remotes/origin/master' was rewritten
WARNING: Ref 'refs/remotes/origin/master' is unchanged

, но когда я пытаюсь параметризовать это, как показано ниже, вся процедура не работает

fileOLD=selenium-server-standalone-2.16.0.jar
git filter-branch --index-filter 'git rm --cached --ignore-unmatch /*${fileOLD}' --prune-empty -- --all 
git push origin master --force 
rm -rf .git/refs/original/ 
git reflog expire --expire=now --all 
git gc --prune=now 
git gc --aggressive --prune=now 
git status
git pull

вывод

Rewrite 0491bf3461726c2ebd595ebc480010b5bf722302 (1/10)fatal: '/About Administration Tools.app' is outside repository
index filter failed: git rm --cached --ignore-unmatch /*${fileOLD} 

и он не удаляет файлы.

Вопрос в том, как правильно передать / экранировать переменную при передаче ее во вложенную команду git?(MAC OS x 10.7.2)

1 Ответ

5 голосов
/ 20 января 2012

Проблема заключается в одинарных кавычках ('), которые вы используете в фильтре git.Bash не заменит переменную внутри одинарных кавычек.

Следующее должно работать (не проверено):

fileOLD=selenium-server-standalone-2.16.0.jar
git filter-branch --index-filter "git rm --cached --ignore-unmatch /*${fileOLD}" --prune-empty -- --all
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...