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


2244

Ejecutar el comando git clone git@github.com: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?


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 git@github.com:whatever folder-name

Ergo, para right hereuso:

git clone git@github.com: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.


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 git@github.com:whatever .

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


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 git@github.com:whatever .

más

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master

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.


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 git@github.com: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 git@github.com: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).


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 :)


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).


13

Clon:

git clone git@jittre.unfuddle.com:jittre/name.git

Clonar la "rama específica":

git clone -b [branch-name] git@jittre.unfuddle.com:jittre/name.git

13

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

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

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


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


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.


2

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

git -C path clone git@github.com:path_to_repo.git

por ejemplo: git -C /home/ubuntu/ clone git@github.com:kennethreitz/requests.gittiraría del repositorio de git requestsa su /home/ubuntu/ruta.


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

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>

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


-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 .

-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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.