git: Как добавить внешний каталог в репозиторий? - PullRequest
46 голосов
/ 05 марта 2010

Я хочу добавить внешний каталог в существующий репозиторий.

Внешний каталог: / Главная / некоторые / каталог

Рабочий Dir: /htdocs/.git

Если я попытаюсь выполнить следующую команду из каталога / htdocs:

git add / home / some / directory

Я получаю ошибку: Фатально: '/ home / some / directory' находится вне репозитория

Ответы [ 8 ]

51 голосов
/ 08 марта 2010

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

mv /home/some/directory /htdocs/directory
ln -s /htdocs/directory /home/some/
git add ./directory

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

15 голосов
/ 25 декабря 2011

У меня была такая же ошибка ... Погуглил до смерти ... не так много вышло.

Ответ Кристиана сработал:

git --work-tree=/ add /home/some/directory

Но потом "дерево работы" заставило меня пойти. Я grep'd все документы Git и придумал core.worktree.

Я использовал

git config --global core.worktree /

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

13 голосов
/ 07 ноября 2011
git --work-tree=/ add /home/some/directory
8 голосов
/ 01 мая 2011

Есть действительно простое решение для этого.

Допустим, вы находитесь в GAR-repo в / var / data / my-app и хотите добавить / var / data / public / в это репо. Вы не можете использовать «add», потому что Git не будет добавлять ресурсы вне корневого каталога репозитория. Итак ..

Решение:

  1. Переместите каталог / var / data / public / в корневой каталог Git-репо (/var/data/my-app).

  2. Создайте символическую ссылку (символическую ссылку) внутри / var / data / public в папку / var / data / my-app / public, используя: ln -s source_file_or_directory virtual_file_or_directory

Затем просто добавьте перемещенный файл или каталог в Git, используя git add обычным способом. Теперь ваш источник управления Git отслеживает нужный файл / папку, а ваша символическая ссылка во внешнем каталоге гарантирует, что файл / папка доступен для всего остального!

1 голос
/ 06 мая 2017

Если код, который вы хотите добавить в репо, не слишком велик, вы также можете автоматически копировать его в репо каждый раз, прежде чем нажать.

В моем случае мне, например, нужен один R-файл, который я часто изменяю, в нескольких репозиториях, и я написал небольшой сценарий оболочки:

#!/usr/bin/env bash

cp -r /some/directory/file.R .
git add .
git commit -m "add"
git push

... и я запускаю этот скрипт, чтобы запихнуть все изменения, в том числе в /some/directory.

0 голосов
/ 03 августа 2018

Это заставило меня задуматься, поскольку мне бы очень хотелось, чтобы решение использовало символический файл / каталог, но я застрял на компьютере с Windows. Насколько я знаю, символические ссылки в Windows на самом деле не работают таким же образом. Таким образом, другим решением может быть написание двух скриптов / функций bash для «импорта» и «экспорта» рассматриваемых файлов, таких как:

import() {
    cp -fr /home/some/directory /htdocs/
}

export() {
    cp -fr /htdocs/directory /home/some/
}

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

0 голосов
/ 07 сентября 2012

Или вы можете использовать субмодуль, если вы хотите работать с разными репозиториями git (ln не работает таким образом). Попробуйте 'man git-submodule'.

0 голосов
/ 05 марта 2010

Добавить символическую ссылку на каталог в репозитории. Затем добавьте то же самое.

ln -s /home/some/directory/
git add directory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...