файлы контроля версий git в репозиториях без нажатия / вытягивания - PullRequest
3 голосов
/ 09 января 2011

Мой сайт / cms отслеживается в git, и он работает довольно хорошо, за исключением моего файла .htaccess.Файл должен существенно отличаться в зависимости от того, на каком сервере я запускаю код (локальный / тестовый / живой).В результате, сейчас я полностью сохранил .htaccess из git (он находится в моем файле .gitignore).Но иногда он теряется, и в любом случае он является частью сайта, и я бы хотел, чтобы он оставался отслеженным, но я не хочу, чтобы его отправляли в удаленные репозитории, где он мог бы перезаписать правильные конфигурации для других серверов.Есть ли способ заставить git отслеживать файл, но только локально?(Или любым другим способом решения проблемы?)

Ответы [ 5 ]

2 голосов
/ 09 января 2011

Вы можете сделать это с помощью функции Git sparse checkout .Выполните следующие команды в репо, где вы хотите специальный, неотслеживаемый .htaccess файл:

git config core.sparsecheckout true
echo '*' >.git/info/sparse-checkout
echo '!.htaccess' >>.git/info/sparse-checkout
git read-tree --reset -u HEAD

Сначала удалит существующий .htaccess файл.Но теперь это игнорируется с точки зрения Git, так что вы можете поместить туда машинно-ориентированный, и Git не будет беспокоить вас об этом.

Затем вы можете добавить файл .htaccess и управлять им из некоторого другой репозиторий (скажем, ваш локальный).Git с радостью отследит этот файл и сохранит его в репозитории, но на компьютере с вышеуказанной конфигурацией разреженного извлечения Git будет игнорировать локальный файл .htaccess в этом рабочем каталоге, даже если онотличается от того, что в хранилище.

1 голос
/ 09 января 2011

Похоже, что содержимое ваших файлов .htaccess зависит от развертывания и, следовательно, не является частью кода.Другими словами, эти файлы могут быть сгенерированы сценарием развертывания, чтобы соответствовать каждому серверу, вместо того, чтобы хранить их в git, а затем отменить изменения каждый раз, когда один из них фиксируется.

0 голосов
/ 09 января 2011

Если это проблема безопасности, ответ будет «нет», потому что если git отслеживает историю файла, каждый, кто клонирует этот репозиторий, получит полную историю. Но если у вас есть контроль над всеми местоположениями, и вы просто хотите отследить его, но в тех других местах, чтобы не проверять его, возможно, git smudge и git clean filters могут вам помочь. Они позволяют вам редактировать содержимое файла, когда вы проверяете его и фиксируете. Я не уверен, что это хорошо подходит, но я пытаюсь найти работоспособное решение.

В качестве альтернативы можно отследить файл с альтернативным именем (т. Е. Не ".htaccess") и, где это применимо, и только там, где это применимо, создать символическую ссылку с именем .htaccess на отслеживаемое имя.

0 голосов
/ 09 января 2011

Вы можете иметь несколько ветвей, по одной для каждого сервера, чтобы у каждой ветви была своя версия файлов конфигурации, специфичных для сервера. Затем, когда вы вносите изменения в основную ветку, эти другие ветви объединяются с ней и получают последние изменения, но они сохраняют свою собственную конфигурацию. Если файлы конфигурации будут изменены, то потребуется слияние вручную, но в противном случае это может быть автоматизировано с помощью сценариев и, возможно, даже хитростей.

0 голосов
/ 09 января 2011

Храните .htaccess в совершенно отдельном git-репозитории и вставляйте в него символическую ссылку в каталоге, в котором находится ваш код. (И сохраняйте его .gitignore 'в исходном репозитории.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...