Git Pull без изменения моих локальных файлов

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

Это сценарий, у меня есть несколько файлов конфигурации, скажем, один из них называется C, и в этом файле по некоторым причинам есть мой локальный путь, находящийся в том же файле, но на машинах моих коллег у него есть пути к файлам . Итак, C содержит столько же разных состояний, сколько и общее количество коллег в нашей рабочей группе.

Чтобы использовать C локально на каждой из наших машин, мы выполнили git update-index --assume-unchanged ..path-to-C../C, так что всякий раз, когда один из нас делает push, этот конкретный файл не принимается во внимание. Другими словами, если я правильно понял, C не будет обновляться в репозитории на git, даже если мы внесем в него локальные изменения. Таким образом, каждый из нас может указать свой путь к файлу.

Но это только половина проблемы.

Теперь я хочу сказать git, что я не хочу, чтобы вы каким-либо образом изменяли мой локальный C, пока я делаю тягу.

Как мне получить такой результат?

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

Это связано с тем, что для его работы мы выполняем следующую комбинацию команд:

git rm --cached ..path-to-C../C

move C to the .gitignore (with intellij .ignore plugin)

from intellij mark it as a file to be untracked

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

См. также:  Snakemake - ноутбук Jupyter lab не находит ядро

Я хочу автоматизировать эту часть процесса, пометив каким-то образом файл, как я сделал для push, но в данном случае для pull.

stackoverflow.com/a/1733921/341994   —  person config.err    schedule 12.11.2020

Вы можете использовать тайник как обходной путь и создать псевдонимы командной строки, которые используют этот обходной путь. Затем используйте эти псевдонимы вместо обычных pull / push   —  person config.err    schedule 12.11.2020

Обратите внимание: если файл C существует в коммитах и ​​в индексе Git (который заполняется в из коммитов), перечисление файла C в .gitignore буквально не имеет никакого эффекта. Так что упоминание .gitignore здесь неуместно. Что действительно важно, так это этот трюк.   —  person config.err    schedule 13.11.2020

Важно то, что незафиксированные изменения в файле C будут мешать слияниям, которые действительно имеют изменения в файле C. Помните, что git pull означает запустить git fetch, а затем запустить вторую команду Git. Вторая команда Git по умолчанию git merge. Вы можете изменить выбор второй команды, но другой вариант — git rebase — здесь не поможет. Проблема в самом файле C. Не делай так.   —  person config.err    schedule 13.11.2020

Если вы … э-э … обязались (если вы извините за выбор слова) в любом случае сделать это таким образом, что ж, теперь вы должны разобраться с проблемой. Это почти все, что нужно сделать.   —  person config.err    schedule 13.11.2020

@torek извините, torek Я не очень хорошо объяснил процесс, который следует за подходом .gitignore, теперь я отредактировал вопрос, надеюсь, процесс станет более понятным   —  person config.err    schedule 13.11.2020

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: