Как убрать папку вне репозитория?

У меня репозиторий git сидит как ~/a.

В то же время у меня есть кое-что из ~/b/content/data/, которое будет обновляться другим приложением.

В целях резервного копирования я хотел бы добавить материалы ~/b/content/data/ в git ~/a, не перемещая папку. И, конечно же, без ручного копирования.

Могу ли я сделать это? Это через ln?


person Jane Foster    schedule 15.11.2014    source источник
comment
В этом вопросе о том, как разрешить git следовать символическим ссылкам, есть несколько хороших ответов / вариантов.   -  person Dennis van der Schagt    schedule 16.11.2014


Ответы (3)


Добавление символьных каталогов работало до git 1.6.1. Теперь у вас есть другие возможности.

  • Вы можете сделать жесткие ссылки для отдельных файлов, которые хотите сохранить, если вы их знаете или их немного.
  • Вы можете поместить фактические данные в репозиторий и сделать ~/b/content/data/ символическую ссылку.
  • Вы можете использовать sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY вместо ссылки.
person user2291758    schedule 16.11.2014
comment
согласен, третий вариант: sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY действительно работает - person Jackson Tale; 22.11.2014
comment
Как отменить это крепление? - person Jackson Tale; 29.11.2014
comment
sudo umount SOURCEDIRECTORY и sudo umount TARGETDIRECTORY должны работать. - person user2291758; 30.11.2014

Если вы свяжете ~/b/content/data с ~/a/b, git сохранит только ссылку на путь, а не фактическое содержимое. С другой стороны, если вы переместите ~/b/content/data в ~/a/b и свяжете его обратно с ~/b/content/data, git зафиксирует файлы.

person TimePath    schedule 16.11.2014

Другие способы сделать это

git --work-tree=~/b/content/data add .

будет делать это для одноразового использования (указанный вами путь относится к данному рабочему дереву)

Проверьте, есть ли в указанном вами рабочем дереве какие-либо вложенные репозитории (find that/path -name .git), они также известны как подмодули, и то, что будет добавлено в ваш собственный репозиторий, - это просто текущий извлеченный идентификатор фиксации.

Обратите внимание, что проверка, такая как добавление, всегда выполняется для текущего рабочего дерева, поэтому, если вы выполните указанную выше команду, затем выполните фиксацию, а затем выполните проверку без переопределения, вы получите внутренности ~/b/content/data, проверенные в ~/a.

Если вы хотите установить постоянное рабочее дерево для репозитория,

git config core.worktree ~/b/content/data

или как относительный путь (относительно каталога .git)

git config core.worktree ../../b/content/data  # ~/a/.git/.. is ~/a
person jthill    schedule 16.11.2014