Crear un repository remoto a partir de files locales que ya están en un repository local

Soy consciente de la function de clonación que podría hacer esto, pero lo que haría sería clonar lo que está en el repository, siendo todo lo que se empujó.

Lo que necesitamos es modificar algunos files en nuestra plantilla de repository y crear un repository nuevo con estos files modificados, sin tener que enviar estos files (que son dependientes del proyecto) a nuestra plantilla, para que permanezca intacto.

¿Es eso posible? ¿Usar "git add", "git commit" y luego "git push" con un parámetro adicional que sería el repository remoto?

Básicamente, quiero los files, no el repository.

Considere el repository principal (principal) y los repositorys que henetworkingan (child1, child2). Lo que haría para comenzar sería crear una twig por niño en el repository principal:

 main$ git checkout -b child1 ... edit/commit for child1 ... main$ git checkout master main$ git checkout -b child2 ... edit/commit for child2 ... 

Ahora, puedes hacer:

 main$ git push git@yourserver:repositories/child1.git child1:master main$ git push git@yourserver:repositories/child2.git child2:master 

Esto empuja a la twig child1 en el maestro del repository child1. De esta forma puedes mantener limpio tu master principal. Si se trata de un impulso único, puede eliminar las twigs posteriormente. Necesitarás forzar la fusión en los repositorys secundarios si no puedes avanzar rápidamente ( consulta el refspec para el empuje ).

Lo más simple es usar un clon local al que pueda aplicar los cambios antes de presionar a un control remoto. Usted podría hacer lo siguiente:

  1. Haga una copy del repository de templates.

    git clone --no-hardlinks templaterepo newrepo

  2. Filtra los files que no deseas conservar del repository anterior.

    cd newrepo

    git filter-branch --tree-filter "rm -f sensitive/file1.txt file2.txt" HEAD

  3. Haga cualquier otro cambio como lo hace habitualmente en Git.

    git add ...

    git commit ...

  4. Agrega un control remoto.

    git remote add origin git@...

  5. empujar

    git push origin master

Esto garantizará que conserve el historial de todos los files que realmente le importaron, y borrará el historial de los que no le interesan (y que potencialmente contienen datos confidenciales).

Después del paso 1. newrepo ya no tiene ninguna relación con templaterepo , aparte de una historia compartida (el --no-hardlinks supone que estás clonando desde el mismo sistema de files y es solo para una velocidad extra), así que hagas lo que hagas en tu templaterepo después, no afectará el contenido de newrepo (o su control remoto).

Ver git help filter-branch para más.