Как фиксировать исполняемые сценарии оболочки с помощью Git в Windows
"Если вы разрабатываете программное обеспечение, включающее сценарии оболочки в Windows, которое также должно работать в UNIX, у вас возникает проблема.
Файловые системы Windows, такие как NTFS, не поддерживают биты разрешений UNIX.
Каждый раз, когда вы создаете новую оболочку сценарии в Windows или переименуйте существующие (которые могли быть исполняемыми на момент извлечения), они не будут исполняемыми. Когда вы отправите код, эти сценарии не будут запускаться на машине под управлением UNIX.
Приведенный сценарий предварительной фиксации, который предлагается в качестве решения вышеупомянутой проблемы, написан на Python.
Код: Выделить всё
#!/usr/bin/env python
import subprocess
if __name__ == '__main__':
output = subprocess.check_output(["git", "ls-files", "-s", "--", "*.sh"], shell=True).decode("utf-8") # type: str
files_to_fix = []
for line in output.splitlines():
# Example for "line": '100644 82f6a7d558e1b38c8b47ec5084fe20f970f09981 0 test-update.sh'
entry = line.replace('\t', ' ').split(" ", maxsplit=3)
mode = entry[0][3:] # strips the first 3 chars ("100") which we don't care about
filename = entry[3]
if mode == "644":
files_to_fix.append(filename)
for file_path in files_to_fix:
# git update-index --chmod=+x script.sh
subprocess.check_call(["git", "update-index", "--chmod=+x", file_path], shell=True)
Подробнее здесь: https://stackoverflow.com/questions/692 ... s-x-on-all
Мобильная версия