[英]Git post-receive hook fails to checkout, fatal: You are on a branch yet to be born
[英]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.