2009-01-23 14 views
5

Tengo un repositorio remoto de git y un clon local. Digamos que pierdo mi directorio .git local y posteriormente agrego y elimino algunos archivos al directorio de trabajo local.Cuando se usa git, ¿cómo se empuja el directorio de trabajo exacto a un control remoto?

En algún momento, quiero reiniciar el repositorio local, conectarlo al control remoto y, finalmente, mover mi directorio de trabajo local al control remoto exactamente como está (es decir, quiero tener todo el los archivos agregados/eliminados serán los mismos en el control remoto)

¿Cómo puedo lograr esto?

Aquí está mi solución actual, que no me gusta (y puede que no funcione en todos los casos).

git init

git add remoto origen [some_url]

git add. # Agrega todos los archivos en el directorio de trabajo

git commit -m "adición de archivos"

(En este punto, mi idea actual es:

  • crea una rama,

  • buscar a la distancia en que,

  • 'git diff rama principal> my_patch'

  • aplican ese parche a la rama,

  • empuje de la rama a la distancia,

  • tirón en el maestro,

  • y matar a la rama.)

Claramente mi idea es bastante compleja y fea. ¿Algunas ideas?

Respuesta

9

Algo como esto (suponiendo que está comenzando desde el momento de pérdida .git)?

# Make the current directory a git repository. 
# This puts you on a master branch with no commits. 
git init 

# Add a reference to the remote repository. 
git remote add origin urlurlurl 

# Fetch the remote refs. 
git fetch 

# Without touching the working tree, move master branch 
# from nowhere onto the remote master. 
git reset origin/master 

# Stage all changes between the new index and the current tree. 
git add -A 

# Make a commit of these changes. 
git commit -m "New working tree as a patch on remote master" 
+0

¡Eso es perfecto! ¡Muchas gracias! –

0

Lo siento si no te he entendido bien, pero creo que solo quieres hacer el tiro estándar y empujarlo? Have a read of this. Git se encargará de cualquier fusión para usted, y si hay conflictos, puede resolverlos fácilmente.

+0

No, desafortunadamente, no creo que el push and pull estándar funcione para mí. Digamos que el archivo 'foo.txt' existe en el repositorio remoto, pero no en mi directorio local (que, recuerde, aún no está bajo control de fuente). Si hago 'git init', agrego el control remoto, y pull - ¡creará foo.txt! –

+0

Lo siento, debo haberte malinterpretado. Sí, creará foo.txt. Los repositorios de Git son todas copias del otro. – dylanfm

+0

Sí, supongo que solo quiero una manera de decirle a Git "¡Toma la diferencia entre el directorio de trabajo actual y el control remoto y aplícalo al control remoto!" –

3

No creo que sea necesario crear una nueva sucursal en su caso. Aquí está mi respuesta: Haga lo siguiente en su actual repo roto locales:

git init 
git add . 
git commit -m 'add files' #create the local master branch 
git remote add myproj [some_url] 
git fetch myproj 
git branch -r #check the remote branches 
git diff master..myproj/master #view the diffs between your local and remote repos 
#now you are sure there is no conflict, 
#so you merge the remote to your local master branch 
git pull myproj master 
git push myproj #push your local master branch to remote 
#now your upstream and downstream is sync'ed 
1

Aquí está mi solución actual (digamos que ya estoy en el directorio que contiene los archivos actuales, pero no es conseguir un git repositorio)

git clone -n [git_url] tmp_git_dir 
mv tmp_git_dir/.git . 
rm -rf tmp_git_dir 
git add . 
git commit -a -m "commit message" 

Esto parece más simple y agregará y eliminará automáticamente los archivos según sea necesario. Creo que es más eficiente también.

Me pregunto: ¿hay alguna manera de clonar el git repo en el directorio actual (básicamente, solo quiero que el directorio .git esté en el directorio actual, así que no tengo que hacer el mv y el rm)?

Cuestiones relacionadas