Как правильно удалить каталог, который содержит .gitignore и может содержать временные игнорируемые файлы? - PullRequest
1 голос
/ 10 апреля 2020

Рассмотрим следующую раскладку:

tests/
    Vendor/
        Product/
            Module/
                db/
                    .gitignore
                    file-created-by-test-runs-and-ignored-by-gitignore-above.json
                SomeTest.php
                OtherTest.php

В ветке topi c с длинными изгибами мы хотим реорганизовать тесты, чтобы переместить большую часть вышеперечисленного в tests\unit, а также переместить местоположение временных файлов где-то еще, чтобы они не попадали в версионное дерево исходных текстов.

Мы смело приводим дерево в требуемое состояние:

tests/
    unit/
        Vendor/
            Product/
                Module/
                    SomeTest.php
                    OtherTest.php

... и после рефакторинга базовых классов тестов в используйте / tmp или что-то еще, мы добросовестно фиксируем.

Затем мы снова извлекаем основную ветвь, выполняем некоторую работу и запускаем версию набора ветвей основной ветки.

Затем мы проверяем ветвь topi c, и неожиданно у нас остаются временные файлы, оставшиеся от тестовых запусков главной ветки, под tests/Vendor/Product/Module/db, перечисленные как неотслеживаемые файлы. Теперь они не игнорируются, поскольку файлы .gitignore (которые были версионными) были удалены путем извлечения ветки topi c, , но файлы, игнорируемые этими файлами .gitignore, очевидно, не были ' t .

Есть ли рекомендуемая практика для избежания этого раздражения и эффективного выражения намерения: «Эй git, этот коммит удаляет этот каталог; он делает его Прошло . Мы не хотим, чтобы это или что-то в этом существовало, начиная с этого коммита, пока мы снова не передумаем. "? Я довожу дерево до желаемого состояния и обязуюсь. Я ожидаю, что придерживаться. Можно ли этого достичь?

1 Ответ

3 голосов
/ 10 апреля 2020

"Привет, git, этот коммит удаляет этот каталог; он его исчезает.

Git не отслеживает каталоги, только файлы. Он не знает, что Вы удалили каталог, только то, что вы удалили файлы в нем.

Вы можете изменить свой файл сборки, чтобы очистить поврежденные файлы в старом месте. Или, возможно, вы можете оставить .gitignore в старом месте. Но это ветвь работы для ветви, которая не должна жить долго. И это постоянные изменения кода для временной ситуации.

Вы можете написать ловушку после проверки , которая удаляет Каталог db, если вы находитесь только в этой конкретной ветке. Его преимущество заключается в том, что его легко удалить после завершения работы с веткой. Но, опять же, это, вероятно, не стоит усилий для топи c ветвь, которая в любом случае должна быть скоро объединена.

Лучше всего при внесении таких изменений, как это, делать как можно меньше и объединять ветку. Это позволяет избежать многих проблем с файлами в Ваша топическая ветвь c расходится с вашим хозяином. Вы видите только один. Больше проблем возникнет, когда коммиты будут добавлены в основную ветку, которая принимает старый макет.

...