У меня есть такая структура git-репо…
Я хочу преобразовать это во что-то вроде ...
Нет ничего плохого в перемещении файлов внутри хранилища. Однако, даже несмотря на то, что Git может автоматически определять перемещения файлов (некоторые из них исчезнут, а некоторые появятся с точно таким же содержимым), для этого есть специальная команда:
git mv <source> <destination>
Файл будет автоматически перемещен, и он появится в отчете git status
. Поэтому вам потребуется коммит для записи этого.
Это всегда хорошая идея, поскольку всегда нужно избегать переименования / перемещения файлов в репозитории git, если в этом нет особой необходимости. Это потому, что это нарушает континуум истории для этих файлов и затрудняет их поиск.
Предполагается, что каждый коммит не зависит от других, даже если каждый ссылается на предыдущий (или объединенный). В основном это список полностью определенных имен файлов, каждое из которых указывает на их соответствующее содержимое, что позволяет вам легко сравнивать (с git diff
) любые два коммита, где бы они ни находились в графе.
Это действительно мощно, но недостатком является то, что git полагается на имена файлов, чтобы знать, что сравнивать. Если между коммитом и следующим было только несколько изменений имен, git будет угадывать, какие из них на самом деле. Но если вы введете как изменения файла, так и переименование имени, или если вы переименуете файл и создадите другой файл с таким же содержимым, он будет сбит с толку.
Используя git mv
, вы даете Git возможность хранить всю необходимую информацию, чтобы помочь ему в выполнении этой задачи. Кроме того, в некоторых других SCM, которые работают по-другому, это может быть обязательным.
, а затем добавить еще один репозиторий на другом языке, например
Ничего особенного в этом нет. Просто добавьте ваш дополнительный материал, как вы делали бы в начале (не забывайте коммитить, хотя), но помните, что Git не может обрабатывать пустых каталогов . Так что вам нужно добавить хотя бы один файл в вашу директорию "python". Это также означает, что, как только вы удалили самый последний файл в данном каталоге, сам каталог также автоматически исчезнет при следующей проверке. Не удивляйся этому.
Это связано с тем, что, как было сказано ранее, Git рассматривает только файлы (даже если он по-прежнему может работать с символическими ссылками и специальными файлами) и отслеживает их соответствующие места, поддерживая полное имя файла (например, "/ имя_директории / базовое имя"). Поэтому он не может обрабатывать ветвь, у которой нет конца в конце.
Кроме того, если ваши каталоги "javascript" и "python" не имеют ничего общего (кроме частей данного уникального проекта), вам лучше превратить их в несколько отдельных репозиториев git. Помните, что вы всегда можете запустить новый репозиторий с помощью git init
, даже если в нем уже есть что-то.
Наконец, когда вы достигли точки, когда вы хотите создать репозиторий внутри большего, например, для публичного обмена маленьким, сохраняя при этом некоторую дополнительную информацию, или при работе над большим проектом, в котором из его библиотек проект сам по себе, вы захотите проверить git submodule
, но не сегодня. :)