2013-03-19 3 views
2

Возможно ли использовать .gitignore на дистанционной основе? Я хочу, чтобы иметь возможность извлекать основные обновления из открытого репозитория проекта с открытым исходным кодом, но нажимать локальные изменения из (в настоящее время) .gitignored-каталога на мой частный репозиторий git на другом удаленном компьютере. Это возможно?Использовать .gitignore на удаленной основе?

Спасибо!

EDIT: Дальнейшее отражение, похоже, что подмодули git могут быть хорошим способом справиться с этим.

http://git-scm.com/book/en/Git-Tools-Submodules

EDIT2: Я использую подмодули весь день, и это решение кажется идеальным для того, что я хотел сделать.

ответ

2

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

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

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

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

+0

Интересно. Поэтому я создаю и переключаюсь на ветку, а затем удаляю каталог, который я хочу отслеживать из .gitignore. Затем я могу отследить его и нажать на свое личное репо. Затем вернитесь к ветке проекта, когда мне нужно вытащить обновления проекта в основное приложение? – gtcaz

+0

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

+0

Блестящий. Я вытащил из оригинала оригинала, и этот объединенный проект восходящего потока вступает в мою локальную ветвь dev. (Основные файлы разработки и локального развития находятся в разных каталогах, поэтому конфликт не должен быть.) Затем я нажал эту ветвь на свое частное репо, которое теперь содержит все. Звучит правильно? – gtcaz

0

Я так не верю - но git удивил меня раньше.

Полагаю, что .gitignore - это хранилище, ограниченное и применимое ко всему.

Можно явно указать определенные проигнорированные файлы, которые git продолжит отслеживать, как если бы они не были проигнорированы - но это не на пульт.

0

Нет, это невозможно. Для этого вам нужно будет поддерживать отдельные ветви.

1

У меня также была аналогичная проблема, когда я работал с 2 пультами и мне нужно было игнорировать разные файлы по ним.

Это то, что я сделал:

$ git fetch <public remote> 

Объединить все, но исключает изменения в текущей .gitignore

$ git merge --no-ff --no-commit <public remote>/master 
$ git checkout master path/to/.gitignore 
$ git commit -m "Merged ... into ... excluding the .gitignore" 

Этот путь я тяну изменения с пульта дистанционного управления и держать мой существующий .gitignore file

Смежные вопросы