¿Cómo clonar un repositorio Git en una carpeta específica?

2244

Ejecutar el comando git clone [email protected]:whatevercrea un directorio en mi carpeta actual llamado whatever, y coloca el contenido del repositorio de Git en esa carpeta:

/httpdocs/whatever/public

Mi problema es que necesito el contenido del repositorio de Git clonado en mi directorio actual para que aparezca en la ubicación adecuada para el servidor web:

/httpdocs/public

Sé cómo mover los archivos después de haber clonado el repositorio, pero esto parece romper Git, y me gustaría poder actualizar simplemente llamando git pull. ¿Cómo puedo hacer esto?

David Smith
fuente
3
En Windows, puede mover archivos de la carpeta donde clonará el repositorio [si hay alguno] para que esté vacío cuando haga clon de git . Después de la clonación, mueva sus archivos hacia atrás [ctrl-z] y whoala ! Si la carpeta actual está vacía, simplemente use: git clone giturl .
44
Voila es la ortografía
Matthias
82
@MatthiasDailey voilà es la ortografía real
silkfire
66
et voilà es francés para et voilà
Fattie

Respuestas:

3222

Opcion A:

git clone [email protected]:whatever folder-name

Ergo, para right hereuso:

git clone [email protected]:whatever .

Opcion B:

Mueve la .gitcarpeta también. Tenga en cuenta que la .gitcarpeta está oculta en la mayoría de los exploradores de archivos gráficos, así que asegúrese de mostrar los archivos ocultos.

mv /where/it/is/right/now/* /where/I/want/it/
mv /where/it/is/right/now/.* /where/I/want/it/

La primera línea toma todos los archivos normales, la segunda línea toma los archivos de puntos. También es posible hacerlo en una línea habilitando dotglob (es decir shopt -s dotglob), pero esa es probablemente una mala solución si hace la pregunta que responde esta respuesta.

Mejor todavía:

Mantenga su copia de trabajo en otro lugar y cree un enlace simbólico. Me gusta esto:

ln -s /where/it/is/right/now /the/path/I/want/to/use

Para usted, esto sería algo como:

ln -sfn /opt/projectA/prod/public /httpdocs/public

Que fácilmente se puede cambiar para probar si lo desea, es decir:

ln -sfn /opt/projectA/test/public /httpdocs/public

sin mover archivos. Se agrega -fnen caso de que alguien esté copiando estas líneas ( -fes forzado, -nevite algunas interacciones a menudo no deseadas con enlaces ya existentes y no existentes).

Si solo quieres que funcione, usa la Opción A, si alguien más va a ver lo que has hecho, usa la Opción C.

Can Berk Güder
fuente
8
No había pensado en su opción 'Mejor aún', y me gusta, aunque no estoy seguro de por qué. ¿Cuáles son las ventajas de esto?
David Smith
66
Probablemente no proporcione ninguna ventaja en este momento, pero podría ahorrarle muchos problemas si decide mover las cosas algún día.
Can Berk Güder
12
Además, puede cambiar entre lanzamientos rápidamente con la opción "Mejor aún". Esto es especialmente útil y se usa para servidores.
Halil Özgür
44
@MEM Creo que quiere decir crear un enlace simbólico a .git, es decirln -s path/to/.git path/to/working/directory
Alexander
27
¿Alguien puede explicar los beneficios de esto? Estoy siendo un poco denso hoy. ¿Cómo el uso de un enlace simbólico beneficia a los servidores?
triple
586

El ejemplo que creo que mucha gente hace esta pregunta es este. Si está en el directorio en el que desea volcar el contenido del repositorio git, ejecute:

git clone [email protected]:whatever .

Los "." al final especifica la carpeta actual como la carpeta de pago.

J Wynia
fuente
28
cierto, por lo que no desea ejecutar "git init" en esta carpeta antes de clonarla. Pero si lo hizo, entonces eliminar la carpeta .git antes de la clonación hará el truco.
Magne
3
arreglado para directorios vacíos en mi respuesta
csomakk
1
no podría hacer que esto funcione en nitrous.io? incluso después de vaciar, dice que el directorio no está vacío
Tejas Manohar
@TejasManohar Asegúrese de haber eliminado también los archivos ocultos.
Británico
ls -amostrará todos los archivos, incluidos los ocultos.
Michael Dorst el
215

Vaya a la carpeta. Si la carpeta está vacía, entonces:

git clone [email protected]:whatever .

más

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master
csomakk
fuente
99
En realidad, esta fue la respuesta más útil para mí cuando solo necesitaba empujar el proyecto ya creado al repositorio recién creado. ¡Prestigio!
2014
13
Solo la respuesta que especifica cómo pagar en una carpeta no vacía, gracias.
Preston Badeer
2
Esto es realmente útil ya que el switch -tencendido no se muestra claramente en la documentación de pago de git .
Chetabahana
44
¿Qué hace el modificador -t? ¿Recibo un mensaje de cancelación con una lista de archivos sin seguimiento que se sobrescribirán al finalizar la compra? ¿Qué hacer en esta situación? ¿No quiero que se sobrescriban esos archivos?
Momin Zahid
2
-t documentación de git: -t, --track Al crear una nueva rama, configure la configuración "ascendente". Ver "--track" en git-branch (1) para más detalles.
csomakk
87

Clonación básica del repositorio de Git

Clonas un repositorio con

git clone [url]

Por ejemplo, si desea clonar la biblioteca Git de Marco Abierto de Drupal de la Universidad de Stanford llamada open_framework, puede hacerlo así:

$ git clone git://github.com/SU-SWS/open_framework.git

Eso crea un directorio llamado open_framework (en su ubicación actual del sistema de archivos local), inicializa un directorio .git dentro de él, extrae todos los datos para ese repositorio y comprueba una copia de trabajo de la última versión. Si ingresa al directorio open_framework recién creado, verá los archivos del proyecto allí, listos para trabajar o usar.

Clonación de un repositorio en una carpeta local específica

Si desea clonar el repositorio en un directorio llamado algo diferente a open_framework, puede especificarlo como la siguiente opción de línea de comandos:

$ git clone git:github.com/SU-SWS/open_framework.git mynewtheme

Ese comando hace lo mismo que el anterior, pero el directorio de destino se llama mynewtheme.

Git tiene varios protocolos de transferencia diferentes que puedes usar. El ejemplo anterior usa el protocolo git: //, pero también puede ver http (s): // o user @ server: /path.git, que usa el protocolo de transferencia SSH.

Craig Gjerdingen
fuente
esto creará automáticamente una carpeta en su carpeta actual y colocará los archivos allí. Por lo tanto, no necesita preocuparse por sobrescribir ninguna otra carpeta.
arn-arn
24

Para clonar el repositorio de git en una carpeta específica, puede usar el -C <path>parámetro, por ejemplo

git -C /httpdocs clone [email protected]:whatever

Aunque seguirá creando una whatevercarpeta encima, para clonar el contenido del repositorio en el directorio actual, use la siguiente sintaxis:

cd /httpdocs
git clone [email protected]:whatever .

Tenga en cuenta que la clonación en un directorio existente solo se permite cuando el directorio está vacío .

Como está clonando en una carpeta que es accesible para el público, considere separar su repositorio Git de su árbol de trabajo utilizando --separate-git-dir=<git dir>o excluyendo la .gitcarpeta en la configuración de su servidor web (por ejemplo, en el .htaccessarchivo).

kenorb
fuente
17

Para clonar al presente directorio de trabajo :

git clone https://github.com/link.git

Para clonar a otro directorio :

git clone https://github.com/link.git ./Folder1/Folder2

Espero eso ayude :)

Sarat Chandra
fuente
Esto también funcionó para mí. no ./al principio del camino a la carpeta
Alon Gouldman
13

Cuando mueve los archivos a donde los quiere, ¿también está moviendo el .gitdirectorio? Dependiendo de su sistema operativo y configuración, este directorio puede estar oculto.

Contiene el repositorio y los archivos de soporte, mientras que los archivos de proyecto que están en su /publicdirectorio son solo las versiones en el commit de verificación actual (rama maestra por defecto).

Pablo
fuente
13

Si desea clonar en la carpeta actual, debe intentar esto:

git clone https://github.com/example/example.git ./
Luis
fuente
8
fatal: ruta de destino '.' ya existe y no es un directorio vacío.
Cleiton
11

Uso

git clone <repository>

Clone el repositorio ubicado en el <repository> en la máquina local. El repositorio original se puede ubicar en el sistema de archivos local o en una máquina remota accesible a través de HTTP o SSH.

git clone <repo> <directory>

Clone el repositorio ubicado en <repository> en la carpeta llamada <directory> en la máquina local.

Fuente: configuración de un repositorio

Nagarjun
fuente
9

Asegúrese de eliminar el repositorio .git si está tratando de verificar algo en el directorio actual.

rm -rf .git entonces git clone https://github.com/symfony/symfony-sandbox.git

alex
fuente
3

Así es como lo haría, pero he creado un alias para hacerlo por mí.

$ cd ~Downloads/git; git clone https:git.foo/poo.git

Probablemente hay una forma más elegante de hacer esto, sin embargo, me pareció más fácil para mí.

Aquí está el alias que creé para acelerar las cosas. Lo hice para zsh, pero debería funcionar bien para bash o cualquier otro shell como fish, xyzsh, fizsh, etc.

Edite ~/.zshrc, /.bashrcetc. con su editor favorito (el mío es Leafpad, así que escribiría $ leafpad ~/.zshrc).

Sin embargo, mi preferencia personal es crear un complemento zsh para realizar un seguimiento de todos mis alias. Puede crear un complemento personal para oh-my-zsh ejecutando estos comandos:

$ cd ~/.oh-my-zsh/
$ cd plugins/
$ mkdir your-aliases-folder-name; cd your-aliases-folder-name
     # In my case '~/.oh-my-zsh/plugins/ev-aliases/ev-aliases'
$ leafpad your-zsh-aliases.plugin.zsh
     # Again, in my case 'ev-aliases.plugin.zsh'

Luego, agregue estas líneas a su archivo en blanco alises.plugin recién creado:

# Git aliases
alias gc="cd ~/Downloads/git; git clone "

(A partir de aquí, reemplace su nombre con el mío).

Luego, para que los alias funcionen, ellos (junto con zsh) deben ser adquiridos (o como se llame). Para hacerlo, dentro de su documento de complemento personalizado agregue esto:

## Ev's Aliases

#### Remember to re-source zsh after making any changes with these commands:

#### These commands should also work, assuming ev-aliases have already been sourced before:

allsource="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh; clear"
sourceall="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh"
#### 

####################################

# git aliases

alias gc="cd ~/Downloads/git; git clone "
# alias gc="git clone "
# alias gc="cd /your/git/folder/or/whatever; git clone "

####################################

Guarde su complemento oh-my-zsh y ejecútelo allsource. Si eso no parece funcionar, simplemente corre source $ZSH/oh-my-zsh.sh; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh. Eso cargará la fuente del complemento que le permitirá usar allsourcede ahora en adelante.


Estoy en el proceso de hacer un repositorio Git con todos mis alias. No dude en consultarlos aquí: los archivos de puntos de Ev . No dude en bifurcar y mejorarlos para satisfacer sus necesidades.

Ev-
fuente
2

Si está utilizando sshpara git cloning, puede utilizar el siguiente comando.

git -C path clone [email protected]:path_to_repo.git

por ejemplo: git -C /home/ubuntu/ clone [email protected]:kennethreitz/requests.gittiraría del repositorio de git requestsa su /home/ubuntu/ruta.

Ankit Singh
fuente
2

Por alguna razón, esta sintaxis no se destaca:

git clone repo-url [folder]

Aquí la carpeta es una ruta opcional a la carpeta local (que será un repositorio local).

Git clonetambién pullcodificará desde el repositorio remoto al repositorio local. De hecho es cierto:

git clone repo-url  =  git init + git remote add origin repo-url + git pull
prosti
fuente
0

Aunque todas las respuestas anteriores son buenas, me gustaría proponer un nuevo método en lugar de utilizar el método de enlace simbólico en el directorio html público como se propone MEJOR en la respuesta aceptada. Debe tener acceso a las configuraciones de host virtual de su servidor.

Se trata de configurar el host virtual de su servidor web directamente apuntando al directorio del repositorio. En Apache puedes hacerlo como:

DocumentRoot / var / www / html / website / your-git-repo

Aquí hay un ejemplo de un archivo host virtual:

<VirtualHost *:443>
    ServerName example.com

    DocumentRoot /path/to/your-git-repo
    ...
    ...
    ...
    ...
</VirtualHost>
Tarik
fuente
0

Puede usar el siguiente comando git para clonar con un nombre de directorio personalizado

git clone <git_repo_url> <your_custom_directory_name>

Nota: No necesita crear su directorio personalizado porque se creará automáticamente

Manoj Rana
fuente
-1
For Windows user 

1> Open command prompt.
2> Change the directory to destination folder (Where you want to store your project in local machine.)
3> Now go to project setting online(From where you want to clone)
4> Click on clone, and copy the clone command.
5> Now enter the same on cmd .

It will start cloning saving on the selected folder you given .
Rayo Tarit
fuente
-5

Con respecto a esta línea de la publicación original:

"Sé cómo mover los archivos después de haber clonado el repositorio, pero esto parece romper git"

Puedo hacer eso y hasta ahora no veo ningún problema con mis operaciones de agregar, confirmar, empujar, tirar.

Este enfoque se indicó anteriormente, pero no se desglosa en pasos. Aquí están los pasos que funcionan para mí:

  1. clonar el repositorio en cualquier carpeta temporal nueva
  2. cd en esa carpeta raíz que acabas de clonar localmente
  3. copie todo el contenido de la carpeta, incluido el directorio /.git, en cualquier carpeta existente que desee; (diga un proyecto de eclipse que quiera fusionar con su repositorio)

La carpeta existente en la que acaba de copiar los archivos ahora está lista para interactuar con git.

Gene Bo
fuente