2011-05-03 12 views
15

Estoy usando Git 1.7.4.1. Quiero enviar los commits que hice en una carpeta a mi repositorio remoto. ¿Cómo envío solo los cambios de una carpeta a mi repositorio remoto? Toda la documentación que he encontrado sólo enumera cómo empujar todo el repo ...Empujando solo una carpeta al repositorio remoto

davea-mbp2:systems davea$ git push origin trunk 
Password: 
To http://[email protected]/systems.git 
! [rejected]  trunk -> trunk (non-fast-forward) 
error: failed to push some refs to 'http://[email protected]/systems.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

Los conflictos que estoy siendo advertido sobre no se aplican a la carpeta que quiero empujar. Cualquier ayuda es apreciada, - Dave

Respuesta

1

Git no es como la subversión. La respuesta corta es que no puedes.

usted debe considerar rebase su cambio (sólo el pertinente) contra el mando a distancia

git rebase -i origin/trunk 

debe conseguirle en curso. Asegúrese de leer los comentarios y las instrucciones en el camino. También hay man git-rebase por supuesto.

Al final, cuando esté satisfecho con el resultado, puede crear una nueva rama de allí

git checkout -b rebased HEAD 

o se puede optar por hacer que su nuevo maestro. Dejo en tus manos la forma de administrar tus sucursales localmente (porque no nos informaste sobre ellas).

Woud Empujar a continuación, será fácil con la unidad

git push origin trunk 
4

Git funciona presionando confirmaciones completas. Rebase de forma interactiva para aislar sus cambios en el directorio en el que está interesado, o cree un submódulo para ello.

1

de Git de trabajo es la confirmación. Si desea enviar cambios a un directorio pero no a otros, esos cambios deben ser commits separados.

Si aún no ha enviado estos cambios a otro lugar, puede probar una base de datos interactiva para que sus confirmaciones se vean como usted necesita. Consulte git-rebase man page y this chapter in the Git community book para obtener más detalles.

0

El error que informa no es informar conflictos: solo obtiene conflictos localmente al fusionarse (por ejemplo, como parte de un git pull). Ese error es simplemente negarse a actualizar la sucursal remota con su confirmación, ya que su confirmación no incluye el historial de la sucursal a la que intenta ingresar. Normalmente, eso significa que otra persona ha impulsado un desarrollo divergente a esa rama y necesita extraer o volver a establecer la base: hay más sobre eso aquí: How git works when two peers push changes to same remote simultaneously

Sin embargo, para responder a su pregunta directamente, las confirmaciones siempre representan el estado completo del árbol , por lo que solo debe crear una confirmación que solo tenga los cambios en el subdirectorio de su interés. Simplemente cambie a ese subdirectorio y use git add para organizar los archivos que ha cambiado allí. Luego, cuando se comprometa, asegúrese de que no use el parámetro -a, de lo contrario, todos los cambios en su repositorio se introducirán en esa confirmación.

Cuestiones relacionadas