git: игнорировать файл при извлечении с удаленного1, но нажимать локальную версию на удаленный2

У меня есть 3 репозитория git:

  • local: мое репозиторий для разработки на моем локальном компьютере;
  • remote1 используется для сотрудничества с другими разработчиками;
  • remote2, который является рабочим сервером.

    1. Я хотел бы pull регулярно переходить с remote1 на мое local репо и сохранять некоторые локальные отслеживаемые файлы нетронутыми (т.е. получать и объединять из remote1, но исключить некоторые локальные отслеживаемые файлы из слияния).

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

Другими словами, мне бы хотелось иметь следующие версии file1:

  • local: file1 v.1
  • remote1: file1, v.2
  • remote2: file1, v.1

Примечание. file1 может быть любым (.css, .html, даже .png).

Я пробовал следующие подходы:

  • .gitignore файл (не работает, файл снова становится отслеживаемым после извлечения из remote1)
  • git pull --no-ff --no-commit remote1 master, затем git checkout --ours file1 в соответствии с этим (не работает, file1 становится v.2)
  • .git/info/exclude как описано здесь (не работает, ничего не игнорируется и даже если он игнорируется, file1 не будет перемещен в remote2)

person skanatek    schedule 03.07.2013    source источник


Ответы (1)


Вы можете попробовать:

  • git update-index --assume-unchanged -- path/to/file1 до извлечения из remote1, и
  • git update-index --no-assume-unchanged -- path/to/file1 сразу после извлечения из remote1.

(Если это не сработает, попробуйте также git update-index --skip-worktree)

person VonC    schedule 03.07.2013
comment
Не могли бы вы уточнить? Что делает эта команда внизу? Можно ли так же толкать? - person skanatek; 10.07.2013
comment
@MartinLee stackoverflow.com/a/13631525/6309. Вы можете удалить эту опцию перед нажатием. - person VonC; 10.07.2013