Один из вариантов - просто перемещать вещи внутри вашего текущего хранилища.
Например, предполагая что-то вроде:
/.git
/lib/lib.c
/lib/lib.h
/test.c
/readme.txt
Вы можете создать новую папку (см. Ниже) ипереместите папку lib и папку test.c в новую (используя git mv).Тогда текущий каталог будет вашим родительским каталогом «проекта», который вы хотите, и весь код будет в новой папке.
/.git
/src/lib/lib.c
/src/lib/lib.h
/src/test.c
/readme.txt
Альтернативой будет git filter-branch, как указано в VonCв комментариях.Используя это, я полагаю, вы могли бы создать реструктурированный репозиторий, в котором не было бы фиксации для перемещений, файлы просто всегда существовали бы в новой структуре.