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), обычно безопасно использовать везде просто косую черту, если вы не знаете, что у вас есть особые потребности.

Другие вопросы по тегам