У меня есть каталог 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
Ответы:
Это сработало для меня:
ПРИМЕЧАНИЕ:
-t
установит ветку upstream для вас, если это то, что вы хотите, и обычно это так.источник
git reset origin/master
послеgit fetch
, это будет работать (также сохраняя любые локальные изменения).git checkout ...
git, жалуется, что все мои файлы будут перезаписаны, и я должен сначала переместить их. Когда я сначала выполняю `git reset origin / master /`, команда checkout жалуется, что ветвь с именем master уже существует.git checkout master
был достаточным последним шагом для меня.fatal: A branch named 'master' already exists
. Я думаю, что мне это не нужно.В следующих командах оболочки
existing-dir
есть каталог, содержимое которого соответствует отслеживаемым файлам вrepo-to-clone
репозитории git.источник
git reset --hard HEAD
иначе он не отказался бы от «удаленных» файлов.git reset HEAD
работал нормально для меня.git reset --hard HEAD
уничтожает любые изменения в ваших файлах, поэтому, если они не совпадают с файлами в хранилище, вы не должны этого делать.git reset HEAD
кажется, не имеет никакого влияния на меня.git reset --hard HEAD
делает - но это теряет любые изменения, которые вы внесли в файлы. Есть ли лучшее решение?Небольшая модификация одного из ответов, который работал для меня:
начать работу над мастер-веткой прямо сейчас.
источник
git branch --set-upstream-to=origin/master master
.Предупреждение - это может перезаписать файлы.
Модифицировано из ответа @ cmcginty - без -f у меня не получилось
источник
git checkout .
?Вот что я в итоге делал, когда у меня была та же проблема (по крайней мере, я думаю, что это та же проблема). Я пошел в каталог А и побежал
git init
.Поскольку я не хотел, чтобы за файлами в каталоге A следовал git, я отредактировал .gitignore и добавил в него существующие файлы. После этого я побежал
git remote add origin '<url>' && git pull origin master
и вуаля, B «клонируется» в A без единого сбоя.источник
Я использовал это несколько минут назад, требуя наименее потенциально разрушительных команд:
И вуаля!
источник
Другой простой рецепт, кажется, хорошо работает для меня:
Мой основной вариант использования для извлечения в каталог с существующими файлами - это управление моими точечными файлами Unix с помощью Git. В новой учетной записи в домашнем каталоге уже будут некоторые файлы, возможно, даже те, которые я хочу получить из Git.
источник
.git/config
Файл указывает, что репозитории пустые. 2.) Файлы, обычно хранящиеся в.git
, хранятся в корне (который вы назвали.git
).git
и настройка , поэтому я все еще чувствую себя хорошо в этом методе.core.bare
false
Это сработало для меня:
источник
У меня была похожая проблема с новым веб-каталогом Apache (учетная запись, созданная с помощью WHM), которую я планировал использовать в качестве промежуточного веб-сервера. Сначала мне нужно было клонировать мой новый проект с базой кода и периодически вносить изменения, извлекая данные из репозитория.
Проблема заключалась в том, что учетная запись уже содержала файлы веб-сервера, такие как:
... что я не хотел ни удалять, ни фиксировать в своем хранилище. Мне нужно было, чтобы они оставались там без посторонних и неотслеживаемых.
Что я сделал:
Я пошел в свою веб-папку (существующая_фолдер):
а потом:
Он отображал (как и ожидалось) список многих не подготовленных файлов - тех, которые изначально существовали в моей учетной записи cPanel.
Затем, благодаря этой статье , я просто добавил список этих файлов в:
Этот файл, почти как
.gitignore
файл, позволяет вам игнорировать файлы от постановки. После этого мне нечего было коммитить в каталог .git / - он работает как личный.gitignore
который никто не может увидеть.Теперь проверяем
git status
возвраты:Теперь я могу развернуть изменения на этом веб-сервере, просто извлекая данные из моего репозитория git. Надеюсь, что это поможет некоторым веб-разработчикам легко создать промежуточный сервер.
источник
Вот что я делаю:
источник
Может быть, я неправильно понял ваш вопрос, но не проще ли скопировать / переместить файлы из A в git repo B и добавить нужные с помощью git add ?
ОБНОВЛЕНИЕ: Из Git Doc:
ИСТОЧНИК: http://git-scm.com/docs/git-clone
источник
Я искал что-то похожее, и вот что я придумал:
У меня ситуация, когда у меня есть активное веб-дерево, и я пытался создать для него удаленный репозиторий без перемещения каких-либо файлов в текущем веб-дереве. Вот что я сделал:
git init
git clone --bare /path/to/web/repo
[remote "origin"]
раздел.[remote "origin"]
раздел в .git / config в веб-дереве, указывающий на новое удаленное хранилище.источник
git clone --bare
Здесь излишни и обходные. Почему бы просто неgit remote add origin <URL>
в первую очередь?это работа для меня, но вы должны объединить файлы удаленного репозитория с локальными файлами:
источник
Мне понравился ответ Дейла , и я также добавил
Малая глубина избежала множества дополнительных ранних изменений. Новая ветка дала нам хорошую визуальную историю, что был добавлен новый код с этого сервера. На мой взгляд, это идеальное использование веток. Спасибо большое за понимание всех людей, которые разместили здесь.
источник
У меня такие же проблемы при попытке клонировать в c / code
Но эта папка содержит целую кучу проектов.
Я создал новую папку в c / code / newproject и сопоставил свой клон с этой папкой.
git для рабочего стола затем спросил моего пользователя, а затем клонируется нормально.
источник