簡體   English   中英

git-remote:致命:使用post-receive鈎子,您處於尚未出生的分支上

[英]git - remote: fatal: you are on a branch yet to be born, using post-receive hook

因此,我嘗試將github分支同步到網站的兩個部分,理論上,我github中的master分支應該與我的網站tinyweatherstation.com同步,而beta分支應該與beta.tinyweatherstation.com同步,並且我已經成功地獲得了后接收鈎子與master分支一起使用,但是對於beta分支則為:

git remote add live_beta ssh://wesley@tinyweatherstation.com/var/www/tinyweatherstation.com.git
git push live_beta +beta:refs/heads/beta

我收到錯誤:

    Enter passphrase for key '/c/Users/WesleyN/.ssh/id_rsa':
Counting objects: 999, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (967/967), done.
Writing objects: 100% (999/999), 5.04 MiB | 529.00 KiB/s, done.
Total 999 (delta 360), reused 0 (delta 0)
remote: Resolving deltas: 100% (360/360), done.
remote: fatal: You are on a branch yet to be born
To ssh://tinyweatherstation.com/var/www/beta.tinyweatherstation.com.git
 * [new branch]      beta -> beta

帖子接收鈎看起來像這樣...

#!/bin/sh GIT_WORK_TREE=/var/www/beta.tinyweatherstation.com/html git checkout -f

我已提交到此分支(測試版),所以我知道它在那里,所以請幫助...

  • 獲取所有存儲庫:

     $ git remote add live_beta ssh://wesley@tinyweatherstation.com/var/www/tinyweatherstation.com.git $ git fetch --all 
  • 創建和檢驗,以beta分支與遙控器的beta分支歷史(確保沒有本地beta分支存在):

     $ git checkout beta 
  • 推送到live_beta repo的beta分支:

     $ git push live_beta beta 

錯誤消息來自推送目標(那里的Git)。 假設您的接收后掛鈎是簡單的單行表達式:

GIT_WORK_TREE=/var/www/beta.tinyweatherstation.com/html git checkout -f

這意味着Git居住在:

ssh://tinyweatherstation.com/var/www/beta.tinyweatherstation.com.git

就像錯誤消息所言,“是在尚未誕生的分支上”。 也就是說,該(可能是裸機)存儲庫的當前分支具有一些名稱,例如master ,但該分支名稱尚不存在。

有多種解決方案。 一種是選擇一個顯式分支進行簽出:

GIT_WORK_TREE=/var/www/beta.tinyweatherstation.com/html git checkout -f beta

這樣一來,這個特殊的Git知道的名稱檢查beta ,而不是當前的分支(再次,可能master -從這里開始,我就認為它 master ),實際上並不存在呢。

另一個方法是在該Git存儲庫中(在服務器上的tinyweatherstation.com/var/www/beta.tinyweatherstation.com.git創建分支名稱master tinyweatherstation.com/var/www/beta.tinyweatherstation.com.git 有多種方法可以執行此操作:例如,您可以登錄該計算機,導航至裸倉庫,然后使用git branch將名稱master指向任何現有提交,因為該倉庫中已有一些提交。 或者,可以從客戶端計算機執行另一次git push ,但這一次,執行一次將其推送到名稱master

client$ git push live_beta master

(假設您希望服務器的master服務器指向客戶端master服務器指向的同一提交)。

還有另一種方法是登錄服務器並更改其HEAD象征性指向的名稱 ,即,更改tinyweatherstation.com服務器上當前分支的名稱

server$ git symbolic-ref HEAD refs/heads/beta

現在,沒有分支名稱的git checkout -f將起作用,因為名稱beta指的是您之前推送的分支。

請注意,使用git checkout -f beta作為副作用,會將當前分支設置 beta

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM