Я управляю большим (23 000 LOC для include / src, 5000 LOC для образцов) мультиплатформенной библиотекой кода ANSI C, используемой во всем: от 8-разрядного встроенного процессора с 32 КБ флэш-памяти до настольного ПК Окна. Эта база кода будет продолжать расти, и мы будем добавлять к ней больше платформ.
В настоящее время я использую Subversion для его поддержки, но компания переходит на git для всего контроля версий.
Мне нужен способ иметь разные отображения структуры каталогов, чтобы файлы могли вписываться в существующую структуру каждой целевой среды разработки. Я хочу иметь возможность проверять изменения из этих сопоставленных каталогов, так как мы будем активно разрабатывать библиотеку в структуре каталогов данной платформы. Например, запуск новой платформы может выявить ошибки в библиотеке, и проще всего их исправить и зафиксировать изменения из этой структуры.
Например, одна платформа может иметь следующую структуру:
- ЦСИ / Foo
- SRC / Foo / платформа
- ЦСИ / alternate_name_for_bar
- ЦСИ / Baz
- включить / Foo
- включать / бар
- образцы / Foo
В то время как другой может быть таким:
- Lib / Ли / Foo
- Lib / Ли / Foo / платформа
- Lib / Blah / bar
- Lib / Blah / foo / baz (запишите baz как подкаталог foo вместо того же уровня)
- include / foo
- включить / бар
- include / baz
- Образцы / Foo
- Образцы / Foo / общий
и хранилище:
- ЦСИ / Foo
- SRC / бар
- ЦСИ / Baz
- src / platform1 (отображается на foo / platform на источнике платформы 1)
- src / platform2 (отображается на foo / platform на источнике платформы 2)
- src / platform3 (отображается на foo / platform на источнике платформы 3)
- включить / Foo
- включать / бар
- включать / Baz
- samples / platform1 (отображает образцы / foo на платформе 1)
- samples / platform2 (отображает образцы / foo на платформе 2)
- samples / platform3 (отображает образцы / foo на платформе 3)
У меня есть гибкость в структуре каталогов репозитория, но я бы хотел что-то, что имеет смысл и его легко поддерживать. Я также хочу хранить все в одном репозитории, поскольку набор изменений может потенциально повлиять на один из файлов заголовка в include
, несколько файлов в src
и несколько примеров программ.
В Subversion я мог использовать svn: externals для сопоставления каталогов. В репозитории есть все файлы в корневом каталоге с именем master
, а затем дополнительные корневые каталоги для каждой платформы, использующей svn: externals для сопоставления файлов / каталогов с master
с любым макетом, требуемым для данной платформы.
Я очень новичок в git, но я читал о подмодулях, и они, кажется, не соответствуют требованиям, так как они не позволяют отображать каталоги, и вы не можете зафиксировать изменение, которое охватывает несколько подмодулей (AFAIK) .
Большая часть встроенной разработки происходит в Windows, поэтому символические ссылки не будут работать для отображений каталогов.
Есть вероятность, что я смотрю на это неправильно, и мне нужен репозиторий для каждой платформы, который извлекает общий код из другого репозитория. Но из того, что я прочитал в подмодулях git, невозможно выполнить сопоставление каталогов.