Git: какой разделитель путей используется в содержимом .git\HEAD в репозиториях Git в Windows?
Название говорит само за себя, но, например, если HEAD
репозитория Git указывает на ref/heads/master
в любой широко используемой реализации Git для Windows, что из следующего является содержимым файла .git/HEAD
... ой, .git\HEAD
:
ref: refs/heads/master
, илиref: refs\heads\master
?
В любом случае мне нужно вычислить абсолютный путь <git project>\.git\refs\heads\master
, но у меня нет среды Windows, и я не могу узнать, какая форма используется! Ответ очень признателен.
Предыстория: я модифицирую библиотеку Haskell, реализуя макрос, который встраивает хэши ревизий Git проектов Haskell в их исходные коды прямо при компиляции (очень удобно для реализации --version
вариант!). Когда мы компилируем программу, вызывающую этот макрос,git
называется; однако даже до этого, когда инструмент сборки проверяет, требуется ли перекомпиляция, мы не можем вызватьgit
и все, что нужно сделать, это просто проверить обновления файлов! Следовательно, во время каждой компиляции мы должны вычислить и сохранить путь к эталонному файлу, в которомHEAD
указывает, так что справочный файл будет проверен на предмет обновления в следующий раз. Проблема в том, что я хотел бы сделать библиотеку кроссплатформенной, но я не знаю, как вычислить путь к эталонному файлу в Windows, потому что я не знаю исходной формы.
1 ответ
HEAD
использует ссылочное имя, а не разделитель путей. Git всегда использует косую черту в именах ссылок, даже в Windows. Обратные косые черты никогда не допускаются в ссылочном имени ни на какой платформе.
Поскольку Windows также допускает разделители путей с косой чертой (если вы не используете пути UNC), обычно безопасно использовать везде просто косую черту, если вы не знаете, что у вас есть особые потребности.