Estoy trabajando con un repositorio git que necesita una confirmación de otro repositorio git que no sabe nada del primero.
Por lo general, elegiría con cereza usando el HEAD@{x}
en el registro, pero debido a que esto .git
no sabe nada de esta entrada de registro (directorio físico diferente), ¿cómo puedo seleccionar esto, o puedo?
Estoy usando git-svn
. Mi primera rama está usando git-svn
el trunk
de un repositorio de Subversion, y la siguiente rama está usando git-svn
una rama de Subversion.
git
cherry-pick
gitcoder182
fuente
fuente
Respuestas:
Tendrá que agregar el otro repositorio como un control remoto y luego buscar sus cambios. Desde allí ves el commit y puedes elegirlo.
Como eso:
Ahora tiene toda la información para hacer simplemente
git cherry-pick
.Más información sobre cómo trabajar con controles remotos aquí: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
fuente
--stdlayout
opción de git-svn si está usando el diseño estándar de troncal / ramas / etiquetas en Subversion. Entonces la rama Subversion será una mera rama remota de git.git am < d821j8djd2dj812.patch
. Fuera de GH, se podrían hacer conceptos similares como se menciona en la respuesta alternativa a continuación.La respuesta, como se da, es usar el parche de formato, pero dado que la pregunta era cómo seleccionar con precisión desde otra carpeta, aquí hay un código para hacer exactamente eso:
fuente
git format-patch
comando crea un parche a partirsome_other_repo
de la confirmación especificada por su SHA (-1
solo para una confirmación). Este parche se canaliza agit am
, que aplica el parche localmente (-3
significa intentar la fusión tripartita si el parche no se aplica de manera limpia). Espero que eso explique.--ignore-whitespace
. Comando completo:git --git-dir=../<some_other_repo>/.git format-patch -k -1 --stdout <commit SHA> | git am -3 -k --ignore-whitespace
Aquí hay un ejemplo de la combinación remote-fetch-merge.
Entonces tú puedes:
o incluso podrías fusionar toda la rama
fuente
git merge projectB/master
es muy, muy mal , porque no se va a aplicar los cambios de una sola comprometen (como una cereza-escoge lo haría), que en realidad estás en la fusión de todos los cambios en losprojectB/master
que no están contenidas en su propiamaster
rama.git remote rm projectB
. También se usagit tag -d tag-name
para eliminar las etiquetas obtenidas del repositorio remoto. Las confirmaciones remotas ya no se mostrarán en su historial, y la poda eventualmente las eliminará del almacenamiento.Puedes hacerlo, pero requiere dos pasos. Así es cómo:
Reemplazar
<remote-git-url>
con la url o la ruta al repositorio desde el que desea seleccionar cherry.Reemplazar
<branch>
con el nombre de la rama o etiqueta que desea seleccionar desde el repositorio remoto.Usted puede reemplazar
FETCH_HEAD
con un git SHA de la rama.Actualizado: modificado según los comentarios de @ pkalinow.
fuente
git fetch <repo-url> <branch> && git cherry-pick <sha>
.Estos son los pasos para agregar un control remoto, buscar ramas y seleccionar una confirmación
Fuente: https://coderwall.com/p/sgpksw
fuente
Vea Cómo crear y aplicar un parche con Git . (Según la redacción de su pregunta, supuse que este otro repositorio es para una base de código completamente diferente. Si es un repositorio para la misma base de código, debe agregarlo como un control remoto como lo sugiere @CharlesB. Incluso si es para otro base de código, supongo que aún podría agregarlo como un control remoto, pero es posible que no desee obtener toda la rama en su repositorio ...)
fuente
Puede hacerlo en una línea de la siguiente manera. Espero que esté en el repositorio de git que necesita el cambio seleccionado y que haya verificado para corregir la rama.
git fetch [URL de la sucursal] [Branch to cherry-pick from] && git cherry-pick [commit ID]
fuente
ssh://
parte, solo parahttps://
Si. Obtenga el repositorio y luego seleccione desde la rama remota.
fuente
Suponiendo que
A
se reporto que desea cereza elegir, yB
es el que desea quedarse con la escoja para, usted puede hacer esto mediante la adición</path/to/repo/A/>/.git/objects
a</path/to/repo/B>/.git/objects/info/alternates
. Crea estoalternates
archivos si no existe.Esto hará que el repositorio B acceda a todos los objetos git del repositorio A, y hará que la selección de cerezas funcione para usted.
fuente
Mi situación fue que tengo un repositorio al que el equipo empuja, y un clon de eso sentado justo al lado. Este conjunto de líneas en un Makefile funciona correctamente para mí:
Al mantener actualizado al maestro del repositorio desnudo, podemos elegir un cambio propuesto publicado en el repositorio desnudo. También tenemos una forma (más complicada) de seleccionar múltiples braches para una revisión y prueba consolidadas.
Si "no sabe nada" significa "no se puede usar como un control remoto", entonces esto no ayuda, pero esta pregunta SO surgió cuando busqué en Google para crear este flujo de trabajo, así que pensé que podría contribuir de nuevo.
fuente
Si desea seleccionar varias confirmaciones para un archivo determinado hasta llegar a una confirmación determinada, utilice lo siguiente.
fuente