Acabo de instalar git en Windows. Configuré la variable GIT_DIR para que sea c: \ git \ y verifiqué que cygwin mantiene esta variable de entorno (es decir, echo $ GIT_DIR es lo que debería ser). Fui a la carpeta para la que quería crear el repositorio de git, digamos c: \ www, y luego ejecuté:
git init
git add .
Entonces me sale el error:
fatal: This operation must be run in a work tree
No estoy seguro de qué salió mal, pero el directorio c: \ git tiene un archivo de configuración que dice:
[core]
repositoryformatversion = 0
filemode = false
bare = true
symlinks = false
ignorecase = true
Estoy bastante seguro de que esto no debería ser simple y ese es nuestro problema.
Respuestas:
La razón directa del error es que sí, es imposible de usar
git-add
con un repositorio simple. Un repositorio simple, por definición, no tiene árbol de trabajo.git-add
toma archivos del árbol de trabajo y los agrega al índice, en preparación para la confirmación.Sin embargo, es posible que deba pensar un poco en su configuración aquí. GIT_DIR es el directorio de repositorio que se usa para todos los comandos de git. ¿Realmente está tratando de crear un repositorio único para todo lo que rastrea, tal vez cosas en todo su sistema? Un repositorio de git por naturaleza rastrea el contenido de un solo directorio. Deberá establecer
GIT_WORK_TREE
una ruta que contenga todo lo que desea rastrear, y luego.gitignore
deberá bloquear todo lo que no está interesado en rastrear.¿Quizás está tratando de crear un repositorio que solo rastreará
c:\www
? Entonces deberías ponerloc:\www
(no configures GIT_DIR). Este es el uso normal de git, con el repositorio en el directorio .git del directorio de nivel superior de su "módulo".A menos que tengas una buena razón, te recomiendo que sigas la forma en que a git le gusta trabajar. Si tiene varias cosas de las que realizar un seguimiento, ¡probablemente desee varios repositorios!
fuente
git config --unset core.bare
.git branch
comando, pude enumerar las ramas, pero no pude hacerlogit checkout -b feature22
. ¿Eso significa que para enumerar las ramas no se necesita un árbol de trabajo, pero sí lo hace para pagar?Además, probablemente esté dentro de la subcarpeta .git, suba una carpeta a la raíz de su proyecto.
fuente
En caso de que lo que me sucedió le esté sucediendo a otra persona, necesito decir esto: estaba en mi directorio .git dentro de mi proyecto cuando recibí este error. Busqué y busqué respuestas, pero nada funcionó. Todo lo que tenía que hacer era volver al directorio correcto. Fue una especie de momento en la palma de la mano para mí. En caso de que haya alguien más tan tonto como yo, espero que esta respuesta le haya resultado útil.
fuente
Simplemente clone el mismo proyecto en otra carpeta y copie la carpeta .git / a su proyecto.
Ejemplo
Crear carpeta temporal:
cambiar a la carpeta temporal
clona el mismo proyecto en la carpeta temporal :
copie la carpeta .git a su proyecto:
cp -R .git/ path/to/your/project/
cambia a tu proyecto y ejecuta
git status
elimine la carpeta temporal si ha terminado.
Espero que esto ayude a alguien
fuente
Esto debería solucionarlo:
fuente
La configuración explícita de la
GIT_DIR
variable de entorno obliga a git a usar el directorio dado como repositorio de git. Nunca es necesario durante el uso normal.En su ejemplo, debido a que ha especificado un
GIT_DIR
y no tiene nombre.git
(el punto inicial es importante) y no ha proporcionado una--work-tree
opción o establecido laGIT_WORK_TREE
variable de entorno, quiere un repositorio simple cuando dijogit init
.Debido a que un repositorio simple no tiene un árbol de trabajo, una gran selección de comandos no tiene sentido con un repositorio simple.
git add
es solo uno.¿Hay alguna razón en particular por la que necesite usar una ubicación no estándar para su repositorio de git, en lugar de una
.git
subcarpeta debajo de la raíz del árbol de trabajo? Si bien es posible arreglar esto, tiende a ser más complicado y más propenso a errores del usuario.fuente
Crea un repositorio GIT simple
Una pequeña perorata: git no puede crear un repositorio desnudo normal por sí mismo. Estúpido imbécil.
Para ser precisos, no es posible clonar repositorios vacíos. Entonces, un repositorio vacío es un repositorio inútil. De hecho, normalmente crea un repositorio vacío y lo llena inmediatamente:
Sin embargo, git add no es posible cuando creas un repositorio simple:
da un error "fatal: esta operación debe ejecutarse en un árbol de trabajo".
Tampoco puedes comprobarlo:
La solución es crear otro repositorio en otro lugar, agregar un archivo en ese repositorio y enviarlo al repositorio simple.
espero que esto pueda ayudarte
fuente
$ git --bare init bare.git
Initialized empty Git repository in /home18/cbailey/gittest8/bare.git/
$ git clone bare.git non-bare
Cloning into 'non-bare'... \\ done. \\ warning: You appear to have cloned an empty repository.
Tuve este problema, porque
.git/config
contenidoworktree = D:/git-repositories/OldName
. Acabo de cambiarlo aworktree = D:/git-repositories/NewName
Descubrí eso, porque usé git gui , que mostraba un mensaje de error más detallado:
fuente
fatal: this operation must be run in a work tree
. Modificar el archivo de configuración lo solucionó para mí.En mi caso, estaba en la misma carpeta que el archivo ".git" de mi repositorio. Tuve que subir un nivel de directorio, lo resolvió.
fuente
Si nada más parece funcionar, vuelva a verificar la ruta
git config core.worktree
. Si esa ruta no apunta a su directorio de trabajo, es posible que deba actualizarla.La forma en que obtuve este error fue que creé un repositorio de Git en una unidad de red. Funcionó bien en una computadora pero devolvió este error en otra. Resultó que tenía la unidad asignada a una letra de unidad de Windows en la computadora donde la creé, pero no en la otra computadora, y Git guardó la ruta al árbol de trabajo como la ruta mapeada y no la ruta UNC.
fuente
Si un pago existente (no desnudo) comienza a dar este error, verifique su archivo .git / config; si
core.bare
es cierto, elimine esa línea de configuraciónfuente
Si ninguna de las formas habituales anteriores le ayuda, observe el seguimiento de la llamada debajo de este mensaje de error (
"fatal: This operation . . ."
) y localice el script y la línea que está generando el error real. Una vez que ubique esa llamada de error (), desactívela y vea si la operación que está intentando se completa incluso con algunas advertencias / mensajes; ignórelos por ahora. Si es así, finalmente después de completarlo podría mencionar la parte de la operación que no se completó con éxito. Ahora, aborde esta parte por separado según corresponda.En relación con la lógica anterior con mi caso, recibí este mensaje de error
"fatal: This operation . . ."
cuando intentaba obtener el código de Android-x86 conrepo sync . . .
. y el seguimiento de la llamada se mostróraise GitError("cannot initialize work tree")
como la llamada error () que causa el mensaje de error anterior ("fatal: . . ."
). Entonces, después de comentar esoGitError()
en.repo/repo/project.py
,repo sync . . .
continuó y finalmente indicó error para tres proyectos que no se sincronizaron correctamente. ¡Acabo de eliminar sus*.git
carpetas de sus rutas relevantes en el árbol de origen de Android-x86 localmente y ejecutérepo sync . . .
nuevamente y probé el éxito!fuente
El mismo problema que tengo, hice los siguientes pasos,
entonces el trabajo comienza a funcionar.
fuente
Editó el archivo de configuración y cambió bare = true a bare = false
fuente
Además, aparentemente, este error ocurrirá si clona en NTFS Ram Drive.
fuente