Necesito crear un repositorio central de Git pero estoy un poco confundido ...
He creado un repositorio simple (en mi servidor git, máquina 2) con:
$ mkdir test_repo
$ git --bare init
Ahora necesito enviar archivos desde mi repositorio local (máquina 1) al repositorio desnudo (máquina 2). Tengo acceso a la máquina 2 por SSH. La cuestión es que creo que no entiendo el concepto de un repositorio desnudo ...
¿Cuál es la forma correcta de almacenar mi código en el repositorio simple? ¿Cómo puedo enviar los cambios desde mi repositorio local al repositorio simple?
¿Es la forma correcta de tener un repositorio central para tener un repositorio desnudo?
Estoy un poco confundido con este tema. Por favor, dame una pista sobre esto.
--shared
opcióninit
si planea hacer que otras personas presionen para este repositorio. Agrega automáticamente permisos de escritura grupal al repositorio - enlaceEstoy agregando esta respuesta porque después de llegar aquí (con la misma pregunta), ninguna de las respuestas realmente describe todos los pasos necesarios para pasar de la nada a un repositorio remoto (desnudo) totalmente utilizable.
Nota: este ejemplo utiliza rutas locales para la ubicación del repositorio simple, pero otros protocolos git (como SSH indicado por el OP) deberían funcionar bien.
Intenté agregar algunas notas en el camino para aquellos menos familiarizados con git.
1. Inicialice el repositorio desnudo ...
Esto crea una carpeta (repo.git) y la llena con archivos git que representan un repositorio git. Tal como está, este repositorio es inútil: no tiene compromisos y, lo que es más importante, no tiene ramas . Aunque puede clonar este repositorio, no puede extraerlo.
A continuación, necesitamos crear una carpeta de trabajo. Hay un par de formas de hacerlo, dependiendo de si tiene archivos existentes.
2a. Cree una nueva carpeta de trabajo (sin archivos existentes) clonando el repositorio vacío
Este comando solo funcionará si
/path/to/work
no existe o si es una carpeta vacía. Tome nota de la advertencia: en esta etapa, todavía no tiene nada útil. Si ustedcd /path/to/work
y corregit status
, obtendrá algo como:Pero esto es una mentira. Realmente no estás en la rama
master
(porquegit branch
no devuelve nada) y hasta ahora, no hay confirmaciones.A continuación, copie / mueva / cree algunos archivos en la carpeta de trabajo, agréguelos a git y cree la primera confirmación.
Los
git config
comandos solo son necesarios si aún no le has dicho a git quién eres. Tenga en cuenta que si ahora ejecutagit branch
, ahora verá lamaster
rama en la lista. Ahora ejecutagit status
:Esto también es engañoso: el flujo ascendente no se ha "ido", simplemente no se ha creado todavía y
git branch --unset-upstream
no ayudará. Pero está bien, ahora que tenemos nuestro primer commit, podemos presionar y se creará master en el repositorio simple.En este punto, tenemos un repositorio desnudo completamente funcional que se puede clonar en otro lugar en una rama maestra, así como una copia de trabajo local que puede extraer y empujar.
2b. Crear una carpeta de trabajo a partir de archivos existentes Si ya tiene una carpeta con archivos (por lo que no puede clonar en ella), puede inicializar un nuevo repositorio git, agregar un primer commit y luego vincularlo al repositorio desnudo después.
En este punto tenemos nuestro primer commit y una rama maestra local que necesitamos convertir en una rama ascendente de seguimiento remoto.
Observe la
-u
bandera en git push para establecer la (nueva) rama ascendente rastreada. Al igual que antes, ahora tenemos un repositorio desnudo completamente funcional que se puede clonar en otro lugar en una rama maestra, así como una copia de trabajo local que puede extraer y empujar.Todo esto puede parecer obvio para algunos, pero git me confunde en el mejor de los casos (sus mensajes de error y estado realmente necesitan un poco de revisión); con suerte, esto ayudará a otros.
fuente
Responde tus preguntas una por una:
El repositorio desnudo es el que no tiene árbol de trabajo . Significa que todo su contenido es lo que tiene en el
.git
directorio.Solo puede
commit
mostrar el repositoriopush
desde su clon local. No tiene árbol de trabajo, por lo que no tiene archivos modificados, ni cambios.Para tener un repositorio central, la única forma es tener un
bare
repositorio.fuente
También puede pedirle a git que cree un directorio para usted:
fuente
La práctica general es tener el repositorio central al que empuje como un repositorio simple.
Si tiene antecedentes SVN, puede relacionar un repositorio SVN con un repositorio desnudo de Git. No tiene los archivos en el repositorio en la forma original. Mientras que su repositorio local tendrá los archivos que forman su "código" además.
Debe agregar un control remoto al repositorio simple desde su repositorio local y enviarle su "código".
Será algo como:
fuente
git remote add central <url>
, en el caso de SSH, ¿esto también incluiría la ruta? Por ejemplogit remote add central ssh://user@server/home/user/repo.git
Esto debería ser suficiente:
Consulte para más detalles " GIT: ¿Cómo actualizo mi repositorio simple? ".
Notas:
origin
' para la referencia remota de repositorio simple.git push --tags origin
para eso.fuente
Es bueno verificar que el código que presionó realmente se confirmó.
Puede obtener un registro de los cambios en un repositorio desnudo configurando explícitamente la ruta utilizando la opción --relative.
Esto le mostrará los cambios confirmados como si fuera un repositorio git regular.
fuente
Según las respuestas de Mark Longair y Roboprog:
si la versión git> = 1.8
O:
si la versión git <1.8
fuente
El indicador --bare crea un repositorio que no tiene un directorio de trabajo. El repositorio básico es el repositorio central y no puede editar (almacenar) códigos aquí para evitar el error de fusión.
Por ejemplo, cuando agrega un archivo en su repositorio local (máquina 1) y lo empuja al repositorio desnudo, no puede ver el archivo en el repositorio desnudo porque siempre está 'vacío'. Sin embargo, realmente empuja algo al repositorio y puede verlo de manera inexplicable clonando otro repositorio en su servidor (máquina 2).
Tanto el repositorio local en la máquina 1 como el repositorio de 'copia' en la máquina 2 no están desnudos. relación entre repositorios desnudos y no desnudos
El blog te ayudará a entenderlo. https://www.atlassian.com/git/tutorials/setting-up-a-repository
fuente
Puede ejecutar los siguientes comandos para inicializar su repositorio local
Debe trabajar en su proyecto desde su repositorio local y utilizar el servidor como repositorio central.
También puede seguir este artículo que explica todos y cada uno de los aspectos de la creación y el mantenimiento de un repositorio Git. Git para principiantes
fuente