Error directory migrations already exists and is not empty

I am trying to initialize my migration inside a docker image with the command: alembic init {dir_name} For this I will have to map the volume in my system as follows: docker run -it -v $(pwd)/migra...

Because of this, I won’t be able to initialize my migrations as without volume mapping there is no way to persist the migrations folder in my system.

it is standard practice that when a unix application is to create a directory and put things into it, that it would not proceed if the directory is already present, because this indicates existing intent. Normally then, I would suggest you create your mount point one directory upwards of where this subdirectory is to be.

However, as I sought to illustrate an example of how this practice is common, it turns out that git, the best example, has since refined their behavior to check if the directory exists and is also non-empty:

[classic@photon2 tmp]$ mkdir alembic
[classic@photon2 tmp]$ git clone git@github.com:sqlalchemy/alembic.git
Cloning into 'alembic'...
remote: Enumerating objects: 73, done.
remote: Counting objects: 100% (73/73), done.
remote: Compressing objects: 100% (68/68), done.
remote: Total 9519 (delta 28), reused 47 (delta 2), pack-reused 9446
Receiving objects: 100% (9519/9519), 1.91 MiB | 1.42 MiB/s, done.
Resolving deltas: 100% (7067/7067), done.
[classic@photon2 tmp]$ git clone git@github.com:sqlalchemy/alembic.git
fatal: destination path 'alembic' already exists and is not an empty directory.

so this is an enhancement to the existing feature, and looks like this:

diff --git a/alembic/command.py b/alembic/command.py
index f8c81cc..54d7ad1 100644
--- a/alembic/command.py
+++ b/alembic/command.py
@@ -36,19 +36,21 @@ def init(config, directory, template="generic"):
      use.
 
     """
-
-    if os.access(directory, os.F_OK):
-        raise util.CommandError("Directory %s already exists" % directory)
+    if os.access(directory, os.F_OK) and os.listdir(directory):
+        raise util.CommandError(
+            "Directory %s already exists and is not empty" % directory
+        )
 
     template_dir = os.path.join(config.get_template_directory(), template)
     if not os.access(template_dir, os.F_OK):
         raise util.CommandError("No such template %r" % template)
 
-    util.status(
-        "Creating directory %s" % os.path.abspath(directory),
-        os.makedirs,
-        directory,
-    )
+    if not os.access(directory, os.F_OK):
+        util.status(
+            "Creating directory %s" % os.path.abspath(directory),
+            os.makedirs,
+            directory,
+        )
 
     versions = os.path.join(directory, "versions")
     util.status(



it’s still not fully correct since «foo» might exist and not be a directory, but that at least raises «not a directory». Also, I never wrote any tests for this and I’d like to do that too.

Путь назначения уже существует и не является пустым каталогом

Я клонировал репозиторий git, но случайно напортачил. Итак, я повторно клонировал, и появилось сообщение:

destination path already exists and is not an empty directory

Я попытался удалить папки на моем Mac с именем пути назначения, но это не сработало.

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


Ответы
10

Это просто означает, что клон git скопировал файлы с github и поместил их в папку. Если вы попытаетесь сделать это снова, это не позволит вам, потому что он не может клонировать в папку, в которой есть файлы. Поэтому, если вы считаете, что клон git завершился некорректно, просто удалите папку и снова выполните клон git. Клон создает папку с тем же именем, что и репозиторий git.

Если у вас есть Destination path XXX already exists, это означает, что имя репозитория проекта, который вы пытаетесь клонировать, уже существует в этом текущем каталоге. Поэтому, пожалуйста, проверьте и удалите любой существующий и попробуйте клонировать его снова.

Объяснение

Это довольно расплывчато, но я сделаю все возможное, чтобы помочь.

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

Вам обязательно нужно погуглить «команды unix», чтобы узнать больше, но вот несколько важных команд, которые помогут в этой ситуации:

Ls — список всех файлов и каталогов (папок) в текущем каталоге

Cd <input directory here without these brackets> — смените каталог или смените папку, в которой вы смотрите

Mkdir <input directory name without brackets> — создает новый каталог (будьте осторожны, вам нужно будет войти в каталог после того, как вы его создадите)

Rm -r <input directory name without brackets> — Удаляет каталог и все, что в нем

Git clone <link to repo without brackets> — клонирует репозиторий в каталог, который вы просматриваете в данный момент.

Отвечать

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

  1. Открытый терминал
  2. cd documents (без учета регистра на Mac)
  3. mkdir projects
  4. cd projects
  5. git clone https://github.com/seanbecker15/wherecanifindit.git
  6. cd wherecanifindit (если я хочу зайти в каталог)

P.s. wherecanifindit — это просто имя моего репозитория git, а не команда!

Спроектированный способ решить эту проблему, если у вас уже есть файлы, которые нужно отправить на Github / Server:

  1. В Github / Server, где будет жить ваше репо:

    • Создать пустой репозиторий Git (сохранить <YourPathAndRepoName>)
    • $git init --bare
  2. Локальный компьютер (Просто положи в любую папку):

    • $touch .gitignore
    • (Добавьте файлы, которые вы хотите игнорировать в текстовом редакторе, в .gitignore)
    • $git clone <YourPathAndRepoName>

    • (Это создаст пустую папку с вашим именем репо из Github / Server)

    • (Законно скопируйте и вставьте все свои файлы откуда угодно и вставьте их в это пустое репо)

    • $git push origin master

У меня такая же проблема при использовании Cygwin для установки NVM

Фактически, целевой каталог был пустым, но использовался двоичный файл git из Windows (а не git из cygwin git package).

После установки cygwin git package, установка git clone из nvm прошла нормально!

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

Надеюсь, это поможет

Шаги, чтобы получить эту ошибку;

  1. Клонировать репо (например, взять имя как xyz) в папку
  2. Не пытайтесь повторить клонирование в той же папке. Эта ошибка возникнет даже после удаления папки вручную, поскольку удаление папки не приводит к удалению git info.

Решение :
rm -rf «имя папки репо, в нашем случае xyz». Так

rm -rf xyz

Эта ошибка возникает, когда вы пытаетесь клонировать репозиторий в папку, которая все еще содержит папку .git (Скрытая папка).

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

Откройте терминал и измените каталог на папку назначения (куда вы хотите клонировать).

Теперь введите: ls -a

Вы можете увидеть папку с именем .git.

Вы должны удалить эту папку с помощью следующей команды: rm -rf .git

Теперь вы готовы клонировать свой проект.

Создайте новый каталог, а затем используйте URL-адрес git clone

Используйте команду: ls -a
Вы увидите список файлов или папок, которые его блокируют.
Используйте команду: rm -r Имя папки / имя файла

После удаления всех файлов и папок. Вы можете клонировать свой проект в каталог

Другие вопросы по теме

Давайте представим что мы хотим клонировать репозиторий с Git в текущую директорию проекта, делается это, путем указания точки в конце команды. В директории могут находится скрытые файлы и папки. Например .idea от phpStorm. В этом случае, мы получим ошибку:

Fatal: destination path '.' already exists and is not an empty directory

В таком случае, нужно будет полностью очистить директорию, куда вы клонируете репозиторий, а это приведет к определенным проблемам. Например если удалить директорию .idea, то мы удалим все настройки проекта в phpStorm.

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

git init .
git remote add -f origin <repository-url>
git checkout <branch-name>

Описание того, что мы делаем:

  • Инициализируем пустой репозиторий в директории.
  • Добавляем удаленный репозиторий (вместо <repository-url>, укажите путь до репозитория).
  • Выбираем ветку с которой хотим работать.

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

Вот такое альтернативное решение клонирования репозитория в текущую директорию, даже если она не пуста.

Время работы: 0,1050 s
Время запросов: 0,1050 s
Количество запросов: 28
Источник: cache

Это яма для колбы, соответствующей SQLite

Решение

1. Изменить метод в миграциях / evn.py, добавьте Render_as_batch = true

2. Удалите различные вещи под версиями,

3, Re-Execute Python Management.py DB init // Миграция // Обновление

4、

(venv) D:zzPycharmProjectsflask_test2>python manage.py db init
Error: Directory migrations already exists and is not empty

(venv) D:zzPycharmProjectsflask_test2>python manage.py db migrate
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected removed column ‘users.password’
Generating D:zzPycharmProjectsflask_test2migrationsversionseae21a12bdae_.py …  done

(venv) D:zzPycharmProjectsflask_test2>python manage.py db upgrade
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> eae21a12bdae, empty message

Понравилась статья? Поделить с друзьями:
  • Error direct3d e invalidarg
  • Error direct3d device fail
  • Error digital envelope routing
  • Error digest method not supported
  • Error diffusion перевод