Внесены изменения в структуру папок локально, как это точно отразить в git / github? - PullRequest
1 голос
/ 01 августа 2020

У меня было репо git с файлами, изначально структурированными следующим образом:

Folder
 - file1
 - file2
 - file3
 -....
 - file30

Это становилось немного сложно управлять, поэтому я локально изменил структуру на эту:

Folder
 Subfolder
   - file1
   - file2
   - file3
   -....
   - file30
 
 Subfolder2
 ...

В основном внутри моего репо я несколько раз щелкнул правой кнопкой мыши> новую папку, а затем перетащил все свои файлы в эти новые папки.

Затем я сделал:

git add *
git commit -m "foobar"
git push

Однако, когда я посмотрю на github я вижу, что моя новая структура папок в порядке, но все мои старые файлы все еще там, поэтому похоже, что я просто копирую и вставляю свои файлы в их новые папки, а не перемещаю их, что я хотел.

Folder
 Subfolder
   - file1
   - file2
   - file3
   -....
   - file30
 
 Subfolder2
 ...

 - file1
 - file2
 - file3
 -....
 - file30

Ниже вы можете увидеть мою локальную файловую структуру и мое репозиторий на github, в котором есть все лишние «свободные» файлы.

введите описание изображения здесь

Может ли кто-нибудь помочь мне удалить эти "незакрепленные" файлы из моего репозитория на github?

1 Ответ

0 голосов
/ 01 августа 2020

Проблемы

Git на самом деле не файлы и не отслеживают каталоги так, как вы думаете, и добавление файлов в индекс не обязательно удаляет отсутствующие файлы, даже если вы на самом деле переместил или удалил старые. Вы можете увидеть, что, по мнению git, изменилось в индексе, с помощью git status.

Кроме того, оболочка glob * объединяет только те элементы в текущем каталоге, которые не соответствуют исключениям в вашем .gitignore файл. Позвоните по номеру ls *, чтобы узнать, что, по мнению оболочки, вы добавляете в индекс git.

Решения

Если вы внесли существенные изменения в дерево каталогов, вы можете обновить изменяется весь указатель, а не указатель ручной работы. Например:

# change to your repo's top-level directory
cd "$(git rev-parse --show-toplevel)"

# add the entire directory tree to the index
git add .

# update all blobs/trees that git is indexing
git commit -a

Это должно привести к обновлению переименованных, перемещенных и удаленных файлов или каталогов, которые git ранее отслеживал. С вашими текущими командами вы фиксируете только изменения верхнего уровня, которые вы добавляете в индекс с помощью команды оболочки *. Этот альтернативный подход обновит все ваше рабочее дерево с учетом .gitignore.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...