with pages page domain git git-branch github-pages

pages - ¿Por qué llamar git branch--unset-upstream para arreglar?



github pages with domain (6)

En realidad, te dije que ya sabes cómo usar las herramientas mucho mejor de lo que sería capaz de hacer. Sin embargo, en este caso, creo que es importante señalar algo peculiar si sigue las pautas en http://octopress.org/docs/deploying/github/ . A saber, tendrá múltiples repositorios Github en su configuración. En primer lugar, el que tiene todo el código fuente de su sitio web, por ejemplo, el directorio $WEBSITE , y luego el que solo $WEBSITE/_deploy archivos estáticos generados que residen en $WEBSITE/_deploy . Lo divertido de la configuración es que hay un archivo .gitignore en el directorio $WEBSITE para que esta configuración realmente funcione.

Suficiente presentación. En este caso, el error también podría provenir del repositorio en _deploy .

cd _deploy git branch -a * master remotes/origin/master remotes/origin/source

En .git/config normalmente necesitarás encontrar algo como esto:

[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = [email protected]:yourname/yourname.github.io.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master

Pero en su caso, el maestro de sucursal no tiene un control remoto.

[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = [email protected]:yourname/yourname.github.io.git fetch = +refs/heads/*:refs/remotes/origin/*

Que puedes resolver por:

cd _deploy git branch --set-upstream-to=origin/master

Entonces, todo es como te lo dijo Torek, pero podría ser importante señalar que esto podría afectar al directorio _deploy lugar de a la raíz de tu sitio web.

PD: valdría la pena usar un shell como zsh con un plugin de git para no ser mordido por esto en el futuro. Inmediatamente mostrará que _deploy refiere a un repositorio diferente.

Soy más un novato cuando se trata de operaciones avanzadas en git. Octopress mi blog usando el marco de blog Octopress . Aunque Octopress no está en desarrollo desde 2011, cumple mi propósito bien, así que no he pensado en cambiar nada hasta ahora.

FYI, mi blog está alojado en Github Pages.

Hoy, mientras trabajaba en una nueva publicación, el git status mostró el siguiente mensaje:

On branch source Your branch is based on ''origin/master'', but the upstream is gone. (use "git branch --unset-upstream" to fixup)

El mismo mensaje se repite para todos los comandos posteriores, como git add . , git commit -m ''message'' y git push origin source .

  • ¿Qué significa el mensaje?
  • ¿Hay algo roto?
  • Si es así, ¿qué?
  • ¿Necesito arreglarlo?

Si es posible, diríjanme a un artículo pdf / web donde pueda leer sobre esto y entenderlo para el futuro.

Más detalles:

bash-3.2$ git branch -a * source remotes/octopress/2.1 remotes/octopress/HEAD -> octopress/master remotes/octopress/gh-pages remotes/octopress/linklog remotes/octopress/master remotes/octopress/refactor_with_tests remotes/octopress/rubygemcli remotes/octopress/site remotes/origin/source

Por favor, avíseme si se necesita más información. Gracias.


Esto podría resolver su problema.

después de hacer cambios, puede confirmarlo y luego

git remote add origin https://(address of your repo) it can be https or ssh then git push -u origin master

Espero que funcione para ti.

Gracias


La respuesta de torek es probablemente perfecta, pero solo quería que el registro mencionara otro caso diferente al descrito en la pregunta original, pero podría aparecer el mismo error (ya que puede ayudar a otros con problemas similares):

He creado un repositorio vacío (nuevo) usando git init --bare en uno de mis servidores. Luego lo he git clone en un espacio de trabajo local en mi PC.

Después de confirmar una única versión en el repositorio local, recibí el error después de llamar al git status .

Siguiendo la respuesta de torek, entiendo que lo que sucedió es que la primera confirmación del repositorio de directorio de trabajo local creó una rama "maestra". Pero en el repositorio remoto (en el servidor) nunca había nada, por lo que no había ni siquiera una rama "maestra" (remotos / origen / maestro).

Después de ejecutar git push origin master del repositorio local, el repositorio remoto finalmente tenía una rama principal. Esto detuvo el error de aparecer.

Por lo tanto, para concluir, uno puede obtener ese error para un repositorio remoto nuevo y nuevo con cero confirmaciones, ya que no tiene ninguna rama, incluido "maestro".


Para mí, .git/refs/origin/master había corrompido.

Hice lo siguiente, que me solucionó el problema.

rm .git/refs/remotes/origin/master git fetch git branch --set-upstream-to=origin/master


TL; Versión DR: el origin/master remoto de la sucursal solía existir, pero ahora no, por lo que la source sucursal local está rastreando algo que no existe, que es sospechoso en el mejor de los casos; significa que una función diferente no puede hacer nada por usted Y Git te lo advierte. Se ha estado llevando bien sin que la función de "seguimiento en sentido ascendente" funcione según lo previsto, por lo que depende de usted cambiar cualquier cosa.

Esta advertencia es algo nuevo en git, que aparece primero en git 1.8.5. Las notas de la versión contienen solo un breve punto sobre el tema:

  • "git branch -v -v" (y "estado de git") no distinguía entre una rama que no está basada en ninguna otra rama, una rama que está sincronizada con su rama ascendente, y una rama que está configurada con una corriente ascendente rama que ya no existe

Para describir lo que significa, primero necesita saber acerca de "controles remotos", "ramas remotas" y cómo maneja git el "seguimiento de un flujo ascendente".

Cada "remoto" es simplemente un nombre, como origin o octopress en este caso. Su propósito es registrar cosas como la URL completa de los lugares desde los cuales git fetch o git pull updates. Cuando usas git fetch remote , 1 git va a ese control remoto (usando la URL guardada) y trae el conjunto apropiado de actualizaciones. También registra las actualizaciones, usando "ramas remotas".

Una "rama remota" es simplemente una grabación de una rama como la última vez que se vio en algún "remoto". Cada control remoto es en sí mismo un repositorio git, por lo que tiene ramas. Las ramas en el "origen" remoto se registran en su repositorio local bajo remotes/origin/ . El texto que mostró dice que hay una rama llamada source on origin , y branches named 2.1 , linklog , etc. en octopress .

(Una rama "normal" o "local", por supuesto, es solo un nombre de sucursal que ha creado en su propio repositorio).

Por último, puede configurar una rama (local) para "rastrear" una "rama remota". Una vez que la rama local L está configurada para rastrear la rama remota R , git llamará a R "ascendente" y le dirá si está "adelantado" y / o "detrás" de la corriente ascendente (en términos de confirmaciones). Es normal (incluso recomendable) que la sucursal local y las sucursales remotas usen el mismo nombre (excepto la parte del prefijo remoto), como source y origin/source , pero eso no es realmente necesario.

Y en este caso, eso no está sucediendo. Usted tiene una source sucursal local source rastrea un origin/master una sucursal remota.

Se supone que no necesitas saber la mecánica exacta de cómo git configura una sucursal local para rastrear una remota, pero son relevantes a continuación, así que te mostraré cómo funciona esto. Comenzamos con su nombre de sucursal local, source . Hay dos entradas de configuración que usan este nombre, deletreado branch.source.remote y branch.source.merge . A partir de la salida que mostró, está claro que ambos están configurados, de modo que vería lo siguiente si ejecutó los comandos dados:

$ git config --get branch.source.remote origin $ git config --get branch.source.merge refs/heads/master

Al unir esto, 2 esto le dice a git que su source sucursal rastrea su "sucursal remota", origin/master .

Pero ahora mira la salida de git branch -a , que muestra todas las ramas locales y remotas en tu repositorio. Las ramas remotas se enumeran en remotes/ ... y no hay remotes/origin/master . Presumiblemente había, al mismo tiempo, pero ahora se ha ido.

Git te dice que puedes eliminar la información de seguimiento con --unset-upstream . Esto eliminará tanto branch.source.origin como branch.source.merge y detendrá la advertencia.

Parece bastante probable que lo que desee, sin embargo, sea pasar del seguimiento del origin/master al seguimiento de otra cosa: probablemente origin/source , pero tal vez uno de los nombres octopress/ .

Puede hacer esto con la git branch --set-upstream-to , 3 por ejemplo:

$ git branch --set-upstream-to=origin/source

(suponiendo que todavía está en la "fuente" de la sucursal, y que el origin/source es la corriente ascendente que desea, no hay manera de que yo diga cuál, en su caso, realmente quiere).

(Consulte también ¿Cómo hacer que una rama de Git existente rastree una rama remota? )

Creo que la forma en que llegaste aquí es que la primera vez que hiciste un git clone , lo que clonaste tenía un master rama. También tenía un master rama, que estaba configurado para rastrear origin/master (esta es una configuración normal y estándar para git). Esto significaba que tenía branch.master.remote y branch.master.merge set, a origin y refs/heads/master . Pero luego su control remoto de origin cambió su nombre de master a source . Para que coincida, creo que también cambiaste tu nombre local de master a source . Esto cambió los nombres de su configuración, de branch.master.remote a branch.source.remote y de branch.master.merge a branch.source.merge ... pero dejó los valores anteriores , por lo que branch.source.merge era ahora está mal

Fue en este punto cuando se rompió el enlace "aguas arriba", pero en las versiones git anteriores a 1.8.5, git nunca notó la configuración errónea. Ahora que tiene 1.8.5, lo señala.

Eso cubre la mayoría de las preguntas, pero no la respuesta "¿Necesito arreglarlo?" Es probable que hayas estado trabajando en torno a la ruptura desde hace años, haciendo git pull remote branch (por ejemplo, git pull origin source ). Si continúa haciendo eso, seguirá trabajando en torno al problema, por lo tanto, no, no necesita repararlo. Si lo desea, puede usar --unset-upstream para eliminar el --unset-upstream ascendente y detener las reclamaciones, y no tener marca de source local marcada como ascendente en absoluto.

El objetivo de tener un upstream es hacer varias operaciones más convenientes. Por ejemplo, git fetch seguido de git merge generalmente "hará lo correcto" si el upstream está configurado correctamente, y el git status git fetch después de git fetch le dirá si su repo coincide con el upstream, para esa rama.

Si desea la conveniencia, vuelva a configurar el flujo ascendente.

1 git pull usa git fetch , y desde git 1.8.4, esto (¡finalmente!) También actualiza la información de "remote branch". En versiones anteriores de git, las actualizaciones no se registraban en sucursales remotas con git pull , solo con git fetch . Como su git debe ser al menos la versión 1.8.5, este no es un problema para usted.

2 Bueno, esto más una línea de configuración que ignoro deliberadamente que se encuentra en remote.origin.fetch . Git tiene que mapear el nombre de "fusión" para descubrir que el nombre local completo de la rama remota es refs/remotes/origin/master . Sin embargo, el mapeo casi siempre funciona así, por lo que es predecible que el master vaya al origin/master .

3 O bien, con git config . Si solo desea configurar el branch.source.merge ascendente a origin/source la única parte que tiene que cambiar es branch.source.merge , y git config branch.source.merge refs/heads/source lo haría. Pero --set-upstream-to dice lo que quiere que se haga, en lugar de --set-upstream-to hacerlo manualmente, así que esa es una "mejor manera".


Tuve esta pregunta dos veces, y siempre fue causada por la corrupción del archivo git cache en mi sucursal local. Lo arreglé escribiendo el hash de confirmación faltante en ese archivo. Obtuve el hash correcto de commit del servidor y ejecuté el siguiente comando localmente:

cat .git/refs/remotes/origin/feature/mybranch / echo 1edf9668426de67ab764af138a98342787dc87fe / >> .git/refs/remotes/origin/feature/mybranch