как переписать историю, чтобы удалить исполняемый бит в git - PullRequest
4 голосов
/ 01 июля 2011

Я импортировал довольно большой репозиторий из другого SCM в git. К сожалению, миграция была сделана (должна была быть) в Windows, и каждый файл был помещен в git с установленным битом выполнения. Чтобы избежать необходимости повторной миграции (это длительный и подверженный зависаниям процесс), я пытаюсь выяснить, могу ли я очистить исполняемый бит на стороне сервера. Я думал об использовании git filter-branch как-то в сочетании с git update-index, но я мог бы взять подсказки о том, как действовать.

Выполнение огромного коммита в конце, очищающего все исполняемые биты, не является решением - я не хочу, чтобы каждый файл имел удар в истории.

Ответы [ 2 ]

5 голосов
/ 03 июля 2011

Это, кажется, делает трюк:

git filter-branch --index-filter 'git ls-files -s  |
                                  sed s/^100755/10644/ |
                                  git update-index --index-info' -- --all
1 голос
/ 04 июля 2011

Ваше решение довольно хорошее, но есть и другая возможность: git config core.filemode false:

http://git -scm.com / docs / git-config

core.fileMode

Если false, различия в исполняемых битах между индексом и рабочей копией игнорируются;полезно на сломанных файловых системах, таких как FAT.См. Git-update-index (1).

По умолчанию установлено значение true, за исключением того, что git-clone (1) или git-init (1) будут проверять и устанавливать core.fileMode false, если необходимо, при создании хранилища.

Это может создать больше работы для всех, кто должен клонировать репо в будущем (или, возможно, это не так, я не совсем уверен), поэтому ваше решение, вероятно, лучше, но я подумалЯ бы выбросил это, поскольку это может быть более подходящим для чьего-либо варианта использования ...

...