Удалить папку, но не файлы в ней - PullRequest
0 голосов
/ 10 января 2020

Как я могу удалить папку, но сохранить файлы в ней с помощью Git?

Например, допустим, у меня есть папка с именем «MyFolder» в папке моего репозитория (RepoFolder / MyFolder) и внутри «MyFolder» У меня есть файлы «file1» и «file2» (RepoFolder / MyFolder / file1 file2)

Я просто хочу удалить папку «MyFolder» и сохранить файлы «file1» и «file2» в «RepoFolder» «

1 Ответ

0 голосов
/ 11 января 2020

В комментариях есть, вероятно, тот ответ, который вам нужен:

git mv MyFolder/* .

с последующим удалением пустой папки.

Однако помните, что вы частично манипулирование файлами и папками в вашем рабочем дереве . Git не хранит то, что находится в вашем рабочем дереве; скорее, Git сохраняет то, что вы сказали Git, чтобы скопировать в Git index .

Это то, о чем постоянно работает git add: каждый git add, который вы запускаете, говорит Git: скопируйте это в индекс . Вы не можете работать непосредственно с файлами, которые находятся в индексе: они находятся в специальной Git -только форме. Вам нужны копии, с которыми вы можете работать. Git помещает их в ваше дерево работы. Но Git делает новые коммиты из индекса, а не из вашего рабочего дерева.

Файлы в индексе и в Git не в папках , У них просто длинные имена с косой чертой. То есть в индексе у вас есть MyFolder/file1 - это файл , папки нет, это просто файл с именем MyFolder/file1 - и MyFolder/file2. Если вы делаете коммит сейчас, коммит будет иметь эти файлы, с такими же длинными именами.

Если и когда вы скажете Git извлечь некоторый коммит и в , который фиксирует, есть файл с именем super/calli/fragial/istic/expi/ali/docious, Git может потребоваться указать вашему компьютеру , чтобы он создавал папки super.), callisuper) и т. Д., Чтобы поместить файл с именем docious. Git понимает, что ваш компьютер требует, чтобы файлы go помещались в папки, а не просто имели длинные имена. Git сделает эти папки по мере необходимости. Но Git никогда хранил папок! Он просто сохранил файл с длинным именем.

В любом случае, если вы используете git mv MyFolder/file1 file1 для переименования MyFolder/file в file1, так что ваш компьютер перемещает файл из этой папки Git теперь имеет имя file1 в индексе Git, и у вас есть файл с именем file1 в вашем рабочем дереве. Повторите для file2 и теперь предположительно MyFolder пусто. Если у Git в индексе Git нет файлов, чье имя начинается с MyFolder/, Git не будет делать каталог MyFolder в вашем рабочем дереве. Но Git не будет удалять это тоже: вы должны сделать это самостоятельно.

(Поскольку индекс Git имеет файлы с именем file1 и file2 в нем сделанный вами следующий коммит будет содержать файлы с таким именем. текущий коммит по-прежнему содержит MyFolder/file1 и MyFolder/file2. Если, в в будущем вы go вернетесь назад и извлечете этот коммит в свое рабочее дерево, Git создаст MyFolder/, если потребуется.)

...