Заставить git игнорировать каталог и все существующие и будущие файлы внутри - PullRequest
5 голосов
/ 01 апреля 2012

Итак, я новичок в git, но я использую его, потому что мое приложение rails развернуто через heroku. Мое приложение генерирует букмарклет (который представляет собой просто файл js) для каждого пользователя при регистрации. К сожалению, при развертывании все букмарклеты для пользователей на живом сайте перезаписываются букмарклетами для пользователей в моей среде разработки. Я читал некоторые другие вопросы о таких вещах, и я знаю, что мне придется добавить папку bookmarklet в файл .gitignore и кое-что о rm --cache (но я не уверен, что именно нужно сделать). Я пытался делать эти вещи, но мне интересно, проблема в том, что git игнорирует все файлы, которые есть там сейчас, но не игнорирует те, которые сгенерированы после выполнения всего процесса gitignore. Либо это, либо я просто делаю это неправильно (это очень, очень вероятно).

Любая помощь приветствуется. И извините, что это охватывает ту же почву, что и множество других подобных вопросов. Я провел столько исследований, сколько смог.

Спасибо.

Ответы [ 4 ]

8 голосов
/ 01 апреля 2012

Вот несколько простых шагов:

  1. Создайте файл .gitignore в корне вашего хранилища со следующим простым содержимым:

    /path/to_your/folder
    
  2. Добавьте файл в свой репозиторий:

    git add .gitignore
    
  3. Удалите папку из вашего хранилища (это физически не удалит папку):

    git rm --cached /path/to_your/folder
    
  4. Commit

    git commit
    

После этого папка должна быть удалена из вашего хранилища, и последующие изменения в ней будут игнорироваться git.

1 голос
/ 02 апреля 2012

Похоже, что Heroku удаляет все файлы, не зарегистрированные в вашем Git-репозитории, когда вы развертываете. Измените свое приложение, чтобы сохранить закладки в каталоге за пределами вашего репозитория Git.

1 голос
/ 01 апреля 2012

@ poke ответ в основном правильный, но косая черта в имени пути проблематична, поэтому я публикую пересмотренные инструкции.

В следующих шагах предполагается, что подкаталог в вашем git-репозитории имеет имя foo.

  1. Убедитесь, что вы находитесь на верхнем уровне вашего рабочего каталога Git:

    cd "$(git rev-parse --show-toplevel)"
    
  2. Добавьте foo в свой файл верхнего уровня .gitignore:

    echo /foo/ >>.gitignore
    

    Начальная косая черта говорит игнорировать foo на верхнем уровне, но не */foo или */*/foo и т. Д. Завершающая косая черта говорит игнорировать foo, если это каталог, но не если это файл или символическая ссылка.

  3. Сцена недавно измененного .gitignore:

    git add .gitignore
    
  4. Commit:

    git commit -m "Add foo to .gitignore"
    
  5. Прекратить отслеживание содержимого каталога foo в репозитории Git:

    git rm -r --cached foo
    

    Опция --cached указывает Git не удалять папку foo из вашего рабочего каталога.

  6. Commit:

    git commit -m "Remove the foo directory"
    
0 голосов
/ 01 апреля 2012

Добавьте в свой .gitignore следующее:

path/to/ignore/**/*

Если по этому пути уже есть отслеженные файлы, они не будут проигнорированы.

Вам придется запустить

git rm -r --cached path/to/ignore/
...