Как переместить неустановленный файл в неотслеживаемый?

Скажем, это то, на что я смотрю в статусе git:

Changes not staged for commit:
    modified:   Makefile.in

Untracked files:
   ../node_modules/somepath/inverter_packet.js

Что я хочу сделать, так это переместить Makefile.in из «Изменения, не подготовленные для фиксации» в «Файлы без отслеживания».

Я знаю, что могу игнорировать изменения с помощью git update-index --assume-unchanged Makefile.in и вернуть их с помощью команды --no-assume-unchanged, но я бы не хотел, чтобы эти файлы были полностью вне поля зрения, потому что я время от времени редактирую/фиксирую их.

Я хочу удалить файлы из раздела «не подготовлено», но все равно вижу его, когда набираю git status.

В качестве альтернативы, если бы я мог (желательно просто) перестать показывать различия для неустановленных файлов (например, как мой Makefile.in там) при вводе git diff, это тоже было бы хорошо.


person J.M. Janzen    schedule 17.06.2015    source источник
comment
Неотслеживаемые файлы означают файлы, которые вообще не контролируются версией git. Поэтому я думаю, что единственный способ сделать так, чтобы изменения попали в раздел «Неотслеживаемые файлы», — это прекратить их отслеживать. git rm --cached -- <file> git commit. Однако, поскольку вы заявляете, что иногда фиксируете файл, я предполагаю, что это не то, что вы хотите делать.   -  person Alderath    schedule 17.06.2015
comment
Запустите git rm --cached <path>, где <path> обозначает путь к рассматриваемому файлу.   -  person jub0bs    schedule 17.06.2015


Ответы (2)


Я хочу удалить файлы из раздела «не подготовлено», но все равно вижу его, когда набираю статус git.

Куда вы хотите их переместить в? Других мест, где можно спрятаться, действительно нет.

Как вы упомянули, это отслеживаемые файлы, поэтому вы не хотите удалять их из репозитория с помощью git rm, это было бы совершенно неправильно. Единственная реальная возможность здесь состоит в том, чтобы считать их неизменными. В любом случае они будут «вне поля зрения», поэтому вопрос на самом деле не имеет особого смысла.

Еще один вариант - спрятать только этот единственный файл с помощью git stash -p, но тогда вы потеряете изменения в своей рабочей копии до тех пор, пока не вернете тайник обратно, что опять же, похоже, не то, к чему вы стремитесь.

person Yuval Adam    schedule 17.06.2015
comment
Во-первых, спасибо за ваш ответ. Я не хочу, чтобы они куда-то действительно «переезжали» в смысле хранения. Я просто хочу переклассифицировать их как «неотслеживаемые». Но если этого не легко добиться с помощью стандартного набора команд git, мне просто нужно попробовать что-то еще. - person J.M. Janzen; 17.06.2015

Я столкнулся с похожей ситуацией. Вот что я сделал, чтобы сделать unstaged untracking.

  1. git rm [имя файла и путь] --cached

Теперь соответствующий файл удален. Он сохраняет файл на локальном хосте с опцией --cached

  1. git commit (удаленные файлы).

Снова создайте свой проект. Вы получите файл в неотслеживаемом, если он генерируется всегда. Теперь добавьте его в .git/info/exclude.

  1. статус git

Теперь вы отменяете отслеживание изначально неустановленного файла.

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

person rajStack    schedule 12.03.2021