Tengo una cuenta de GitHub de la empresa y quiero hacer una copia de seguridad de todos los repositorios que contiene, teniendo en cuenta cualquier cosa nueva que pueda crearse con fines de automatización. Esperaba algo como esto:
git clone [email protected]:company/*.git
o similar funcionaría, pero no parece que le guste el comodín allí.
¿Hay alguna forma en Git de clonar y luego extraer todo asumiendo que uno tiene los permisos apropiados?
Respuestas:
No creo que sea posible hacerlo de esa manera. Su mejor opción es buscar y recorrer una lista de los repositorios de una organización utilizando la API.
Prueba esto:
http://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}
ssh_url
propiedad.git clone
cada uno de esosssh_url
s.Es un poco de trabajo adicional, pero es necesario que GitHub tenga la autenticación adecuada.
fuente
curl -i https://github.com/api/v3/orgs/company/repos?access_token=<token>
https://github.com/api/v3/
intentarlohttps://api.github.com/
./users/${COMPANY}/repos
ruta en lugar de/orgs/${COMPANY}/repos
.access_token
parámetro de consulta está obsoleto. Si este token lo está utilizando una aplicación sobre la que no tiene control, tenga en cuenta que puede dejar de funcionar como resultado de esta desaprobación.En Windows y todos los sistemas UNIX / LINUX , usando Git Bash o cualquier otra Terminal , reemplace
YOURUSERNAME
por su nombre de usuario y use:CNTX=users
yNAME=yourusername
, para descargar todos sus repositorios.CNTX=orgs
yNAME=yourorgname
, para descargar todos los repositorios de su organización.El tamaño máximo de página es 100, por lo que debe llamar a esto varias veces con el número de página correcto para obtener todos sus repositorios (establezca
PAGE
el número de página deseado que desea descargar).Aquí hay un script de shell que hace lo anterior: https://gist.github.com/erdincay/4f1d2e092c50e78ae1ffa39d13fa404e
fuente
Repositorios de organizaciones
Para clonar todos los repositorios de su organización, pruebe la siguiente línea de shell:
Repositorios de usuarios
Clonando todo usando las URL del repositorio de Git:
Clonando todo usando Clonar URL:
Aquí está la función de shell útil que se puede agregar a los archivos de inicio del usuario (usando
curl
+jq
):Repositorios privados
Si necesita clonar los repositorios privados, puede agregar el token de autorización en su encabezado como:
o pasarlo en el param (
?access_token=TOKEN
), por ejemplo:Notas:
type=private
a su cadena de consulta.hub
después de configurar su clave API.Ver también:
Sugerencias :
- Para aumentar la velocidad, establezca el número de procesos paralelos especificando el
-P
parámetro paraxargs
(-P4
= 4 procesos).- Si necesita aumentar los límites de GitHub, intente autenticarse especificando su clave de API.
- Agregue
--recursive
a recurse en los submódulos registrados y actualice los submódulos anidados dentro.fuente
Esta esencia realiza la tarea en una línea en la línea de comando:
Reemplácelo
[your_org]
con el nombre de su organización. Y configura tuper_page
si es necesario.ACTUALIZAR:
Como mencionó ATutorMe, el tamaño máximo de página es 100, según los documentos de GitHub .
Si tiene más de 100 repositorios, tendrá que agregar un
page
parámetro a su URL y puede ejecutar el comando para cada página.Nota: el
per_page
parámetro predeterminado es30
.fuente
Vaya a Configuración de la cuenta -> Aplicación y cree una clave de API
Luego inserte la clave de API, la URL de la instancia de github y el nombre de la organización en el siguiente script
Guárdelo en un archivo,
chmod u+x
el archivo, luego ejecútelo.Gracias a Arnaud por el código ruby.
fuente
Entonces, agregaré mi respuesta también. :) (encontré que es simple)
Obtener lista (he utilizado la empresa "magento"):
Utilizar en su
clone_url
lugarssh_url
para utilizar el acceso HTTP.Entonces, ¡clonémoslos todos! :)
Si va a obtener repositorios privados, simplemente agregue el parámetro GET
?access_token=YOURTOKEN
fuente
Encontré un comentario en la esencia que @seancdavis proporcionó para ser muy útil, especialmente porque, al igual que el póster original, quería sincronizar todos los repositorios para un acceso rápido, sin embargo, la gran mayoría de los cuales eran privados.
Reemplaza [[USERNAME]] con tu nombre de usuario de github y [[ORGANIZATION]] con tu organización de Github. La salida (metadatos del repositorio JSON) se pasará a un script ruby simple:
fuente
.../orgs/[[organization]]/repos...
a.../users/[[username]]/repos...
. Ahora puedo importar rápidamente todo mi trabajo a diferentes máquinas locales. ¡GRACIAS!Hice un script con Python3 y Github APIv3
https://github.com/muhasturk/gitim
Solo corre
fuente
Este one-liner de Python hará lo que necesita. Eso:
para cada uno, realiza una llamada al sistema
git clone
fuente
fuente
?page=2
.Solución simple:
fuente
Para usarlo (asumiendo que tiene nodejs instalado)
Esto obtendría una lista de todos los repositorios de
wires
y escribiría información en eltest
directorio, utilizando los detalles de autorización (usuario / contraseña) que proporcionas en la CLI.En detalle,
En realidad, no clona los repositorios, sino que escribe un
.txt
archivo al que puede pasarxargs
para hacer la clonación, por ejemplo:Quizás esto sea útil para ti; son solo unas pocas líneas de JS, por lo que debería ser fácil de ajustar a sus necesidades
fuente
También hay un módulo npm muy útil para hacer esto. No solo puede clonar, sino también extraer (para actualizar los datos que ya tiene).
Simplemente crea una configuración como esta:
y hazlo
gitall clone
por ejemplo. Ogitall pull
fuente
En caso de que alguien busque una solución de Windows, aquí hay una pequeña función en PowerShell para hacer el truco (podría ser un delineador / alias si no es el hecho de que necesito que funcione con y sin proxy).
fuente
Entonces, en la práctica, si desea clonar todos los repositorios de la organización
FOO
que coincidenBAR
, puede usar el siguiente esquema, que requiere jq y utilidades cli comunesfuente
Otro script de shell con comentarios que clona todos los repositorios (públicos y privados) de un usuario:
fuente
Cree un alias / func de bash en su
~/.bashrc file
Resolví esto para mi equipo creando un alias / bash func en mi
~/.bashrc file
pasos
abra una terminal o shell de Linux y abra su
~/.bashrc file
:agregue esta función:
guarde y cierre su archivo ~ / .bashrc y luego cierre la terminal; debe hacer esto o la nueva función no se inicializará:
abre una nueva terminal y pruébalo:
ejemplo : si la URL de su repositorio de github personal se llama https://github.com/awesome-async, el comando sería
Importante
el
per_page=200
al final de la primera variableORG_URL
establece el número de pases que serán clonados, así que presta especial atención a lo siguiente:¡Espero que esto ayude! :)
fuente
...repos?page=${2}&per_page=100";
Puede obtener una lista de los repositorios usando
curl
y luego iterar sobre dicha lista con un ciclo bash:fuente
Puede usar la herramienta de código abierto para clonar un montón de repositorios de github: https://github.com/artiomn/git_cloner
Ejemplo:
git_cloner --type github --owner octocat --login user --password user https://my_bitbucket
Utilice la API JSON de
api.github.com
. Puede ver el ejemplo de código en la documentación de github: https://developer.github.com/v3/O allí:
https://github.com/artiomn/git_cloner/blob/master/src/git_cloner/github.py
fuente
Para clonar solo repositorios privados, dada una clave de acceso y dado python 3 y el módulo de solicitudes instalado:
fuente
Una solución de Python3 que incluye una paginación exhaustiva a través de
Link
Header.Prerrequisitos:
pip3 install links-from-link-header
Luego, puede usar
xargs
o paralelo y:cat repolist | parallel -I% hub clone %
fuente
Si tiene una lista de repositorios en una lista como esta, entonces este script de shell funciona:
fuente
Creé un script por lotes de muestra. Puede descargar todos los repositorios privados / públicos de github.com. Una vez que se descarga un repositorio, se convierte automáticamente en un archivo zip.
Nota: el archivo files.txt debe contener solo nombres de repositorio como:
fuente
Actualización del 19 de mayo
use este comando bash para una organización (repositorio privado incluido)
fuente
Las respuestas predominantes aquí no tienen en cuenta que la API de Github solo devolverá un máximo de 100 repositorios a pesar de lo que pueda especificar en
per_page
. Si está clonando una organización de Github con más de 100 repositorios, deberá seguir los enlaces de paginación en la respuesta de la API.Escribí una herramienta CLI para hacer precisamente eso :
Esto clonará todos los repositorios de la
myorg
organización en el directorio de trabajo actual.fuente
Para organizaciones a las que tiene acceso con repositorios privados:
Utiliza el
html_url
, por lo que no es necesario queaccess_token
ingrese su contraseña de github cuando se le solicite.fuente
Clona todos tus repositorios que no sean bifurcaciones:
Clona tus gists:
Este
jq
comando es complejo porque el nombre del repositorio de gists es hash, por lo que el comando concatena todos los nombres de archivo para que sean el nombre del repositorioPuede filtrar el JSON arbitrariamente usando
jq
Instalar en pc:
sudo apt-get install jq
En el ejemplo anterior, filtré las bifurcaciones usando esto:
curl ... | jq -r 'map(select(.fork == false))' ...
- útil para no clonar repositorios donde ha realizado solicitudes de extracción casualesjq admite algunas funciones muy avanzadas.
man jq
es tu amigoPuede autenticarse con
curl -u "username" ...
para acceder a repositorios privadosURL de la API de Guthub
https://api.github.com/user/repos\?page\=1\&per_page\=100
https://api.github.com/users/other_username/repos\?page\=1\&per_page\=100
https://api.github.com/orgs/orgname/repos\?page\=1\&per_page\=100
Documentos de API de Github para repositorios
fuente
fuente
Para clonar todos sus repositorios privados y públicos, simplemente genere un nuevo token de acceso con acceso a repositorios y use esto:
(reemplácelo con su propio token de acceso y nombre de usuario)
Esto clonará todos los repositorios en la carpeta actual
Este es un pequeño programa bash, puedes pegarlo en la terminal y presionar enter
fuente