Как мне клонировать в непустую директорию? - PullRequest
520 голосов
/ 09 марта 2010

У меня есть каталог A с файлами, совпадающими с каталогом B. В каталоге A могут быть другие необходимые файлы. Директория B - это git-репо.

Я хочу клонировать каталог B в каталог A, но git-clone не разрешит мне, так как каталог не пустой.

Я надеялся, что он просто клонирует .git, и, поскольку все файлы совпадают, я могу перейти оттуда?

Я не могу клонировать в пустой каталог, потому что у меня есть файлы в каталоге A, которых нет в каталоге B, и я хочу их сохранить.

Копирование .git не вариант, так как я хочу, чтобы ссылки пушли / толкались, и я не хочу их настраивать вручную.

Есть ли способ сделать это?

Обновление: я думаю, что это работает, кто-нибудь может увидеть какие-либо проблемы? ->

cd a
git clone --no-hardlinks --no-checkout ../b a.tmp 
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this

Ответы [ 14 ]

3 голосов
/ 01 ноября 2011

Я искал что-то подобное, и вот что я придумал:

В моей ситуации есть активное веб-дерево, и я пытался создать для него удаленный репозиторий, не перемещая ни одного файла в текущем веб-дереве. Вот что я сделал:

  1. Перейти к веб-дереву и запустить git init
  2. Перейти к предполагаемому местоположению хранилища и запустить: git clone --bare /path/to/web/repo
  3. Отредактируйте файл конфигурации в моем удаленном репо и удалите раздел [remote "origin"].
  4. Добавьте секцию [remote "origin"] в .git / config в дереве веб-поиска, указывая на новое удаленное хранилище.
2 голосов
/ 25 января 2018

Вот что я делаю:

git clone repo /tmp/folder
cp -rf /tmp/folder/.git /dest/folder/
cd /dest/folder
git checkout -f master
1 голос
/ 03 августа 2016

Мне понравилось Ответ Дейла , и я также добавил

git clone --depth 2 --no-checkout repo-to-clone existing-dir/existing-dir.tmp
git branch dev_new214
git checkout dev_new214
git add .
git commit
git checkout dev
git merge dev_new214

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

0 голосов
/ 02 мая 2019

У меня была похожая проблема с новым веб-каталогом Apache (учетная запись, созданная с помощью WHM), которую я планировал использовать в качестве промежуточного веб-сервера. Сначала мне нужно было клонировать мой новый проект с базой кода и периодически развертывать изменения, извлекая данные из репозитория.

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

.bash_history
.bash_logout
.bash_profile
.bashrc
.contactemail
.cpanel/
...

, что я не хотел ни удалять, ни фиксировать в своем хранилище. Я прислушался к ним, чтобы они оставались там в неприкосновенности и не были отслежены.

Что я сделал:

  1. Я зашел в свою веб-папку (существующая_каталог):

    cd / home / Существующая папка

, а затем:

git init
git remote add origin PATH/TO/REPO
git pull origin master
  1. Затем я проверил состояние git:

    git status

В нем отображался (как и ожидалось) список многих не подготовленных файлов - тех, которые изначально уже существовали в моей учетной записи cPanel.

  1. Тогда благодаря этой статье https://medium.com/@dave_lunny/exclude-files-from-git-without-committing-changes-to-gitignore-986fa712e78d Я только что добавил список этих файлов в:

    .git / Информация / исключить

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

Теперь проверка возврата состояния git:

On branch master
nothing to commit, working tree clean

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...