Я работаю над встроенным проектом Linux. Наш процесс сборки делает изображение, которое высвечивается к устройству. Многие наши файлы требуют, чтобы корневое владение для системы работало правильно. Я столкнулся с проблемой, когда я пытался вытянуть, и некоторые из тех файлов были изменены - мерзавец не мог записать те файлы, сбрасывал трудно и делал получение по запросу sudo. Затем, когда я переключил ответвления, это сказало "не могущий удалить связь..." для всех тех файлов, но это переключило ответвления так или иначе, затем когда я пытался переключиться назад на ответвление, это не позволит мне, потому что у меня были локальные изменения.
Таким образом, я не делаю что-то правильно; что корректный путь состоит в том, чтобы иметь дело с этим?
Я бы структурировал вашу систему так, чтобы исходным файлам было безразлично, каков их владелец. Вы можете проверять их как в git, так и вне его, не беспокоясь о том, какие у них есть разрешения или кто является владельцем (тем более, что «владелец» не имеет значения для всех систем, которые может обслуживать развертывание git).
Если вы хотите сгенерировать встроенное изображение, скопируйте все в новый каталог и , затем установите необходимые разрешения.
Я не уверен, что понимаю, почему некоторые файлы должны быть chowne
'd root. Интуитивно я бы предположил, что ваша проблема заключается в зависимости от владельца, а не в том, что Git не хранит права собственности. Что вы можете сделать, так это chown
в вашей сборке.
Основываясь на ответе Кармастана, магические слова здесь - «сценарий сборки».
Файлы в git не обязательно должны выглядеть как версии развертывания. Вы не развертываете файлы .c - вы сначала их компилируете. Точно так же некоторые файлы конфигурации могут пройти процесс сборки перед развертыванием / установкой.
Самый простой способ (если это возможно) - не выполнять никаких операций (клонирование и т. Д.) Как root, потому что это приведет к тому, что другой пользователь не сможет работать с файлами.
Альтернативой может быть использование git init --shared
для настройки общих (групповых или всех) разрешений для репозитория, за которым следует git remote add origin http: // host / repo .git
и мастер источника извлечения git
.По сути, это клон с менее строгими разрешениями.