2011-05-27 82 views
262

你能解釋這個工作流程有什麼問題嗎?爲什麼我無法推送到這個裸倉庫?

$ git init --bare bare 
Initialized empty Git repository in /work/fun/git_experiments/bare/ 
$ git clone bare alice 
Cloning into alice... 
done. 
warning: You appear to have cloned an empty repository. 
$ cd alice/ 
$ touch a 
$ git add a 
$ git commit -m "Added a" 
[master (root-commit) 70d52d4] Added a 
0 files changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 a 
$ git push 
No refs in common and none specified; doing nothing. 
Perhaps you should specify a branch such as 'master'. 
fatal: The remote end hung up unexpectedly 
error: failed to push some refs to '/work/fun/git_experiments/bare' 

git push總是推到我從克隆的資源庫?

+0

你不應該指定分支推? – Rekin 2011-05-27 21:14:48

+2

不是克隆後!問題解決後,它工作的很好,不需要指定分支......只是在第一次簽出一個空的存儲庫時會發生這種非常非常煩人的事情......他們應該解決這個問題。 – 2012-05-23 16:49:09

+0

希望這篇文章對上面的人有用 - http://samranga.blogspot.com/2015/07/create-git-bitbucket-repository-from.html?view=sidebar問題中的錯誤可以即使試圖從已經存在的本地項目中創建git BitBucket存儲庫 – 2015-07-02 13:08:23

回答

446

是的,問題是沒有提交「裸」。如果您按順序創建倉庫(裸設備,alice),則僅第一次提交時會出現問題。試試看:

git push --set-upstream origin master 

這隻會在第一次需要。之後它應該可以正常工作。

正如克里斯約翰森指出的,如果你的push.default是自定義的,你就不會有這個問題。我喜歡上游/跟蹤。

+1

我正在做'sudo apt-get upgrade git-core'和'sudo apt-get upgrade git',它認爲不需要更新。 'git --version'返回1.7.3.1。任何想法缺少什麼?我承認目前'apt-get update'對我來說不起作用,但它不是很久以前。 – ripper234 2011-05-27 21:35:56

+1

@ ripper234:git的當前版本是1.7.5.3您可以忍受不便,使用不同的工作流程,或者使用debian/ubuntu包裝手動安裝最新的git。 – 2011-05-27 21:37:58

+0

對啊,我忘了軟件在打包之前需要一些時間。我是來自Windows的linux noob,用來點擊這裏安裝最新版本。 – ripper234 2011-05-27 21:47:10

43

如果您:

git push origin master 

它會推到裸露的回購協議。

這聽起來像你的愛麗絲回購沒有正確跟蹤。

cat .git/config 

這將顯示默認的遠程和分支。

如果

git push -u origin master 

你應該開始追蹤遠程和分支。我不確定這個選項是否一直在git中。

17
git push --all 

是將所有內容推送到新裸倉庫的規範方法。

另一種方式做同樣的事情是創造新的,非純倉庫,然後進行與

git clone --bare 

裸克隆再在原使用

git remote add origin <new-remote-repo> 

(非裸)存儲庫。

+0

但它仍然不起作用在我的情況。 – ripper234 2011-05-28 05:21:28

+0

...所以你低估了答案?它是將一切推到一個新的裸倉庫的標準方式。如果它不適合你,還有其他問題。 – ebneter 2011-05-28 07:59:15

+0

你說得對,我可能不應該,我知道你只是想幫忙。如果你編輯它,我會撤銷我的downvote。 – ripper234 2011-05-28 11:14:06

7

alice庫試試這個(前推):

git config push.default tracking 

或者,它配置爲默認與git config --global …用戶。


git push不會默認爲origin庫(通常是從中克隆當前庫庫),但它不會默認爲推動當前分支,它默認爲推動唯一分支機構同時存在於兩個源存儲庫和目標存儲庫。

push.default配置變量(見git-config(1))控制什麼時候(存儲庫名稱後,即東西)沒有給出任何「的Refspec」論據git push將推動。默認值給出了上述行爲。

以下是可能的值push.default

  • nothing
    這將迫使你提供一個「的Refspec」。

  • matching(默認)
    這推動同時存在於兩個源存儲庫和目標資源庫所有分支機構。
    這完全獨立於當前檢出的分支。

  • upstreamtracking
    (這兩個值都意味着同樣的事情。後來被廢棄,以避免與「遠程跟蹤」分支混淆,前者是在1.7.4.2介紹,所以你將不得不使用後者如果您使用的是Git 1.7.3.1。)
    這些將當前分支推送到由其「上游」配置指定的分支。

  • current
    這會將當前分支推送到目標存儲庫中同名的分支。

    這最後兩個端向上是相同,共同例(例如,工作在本地其使用原點/主作爲其上游),但它們是不同的,當本地分支具有從不同的名稱及其「上游」分支:

    git checkout master 
    # hack, commit, hack, commit 
    
    # bug report comes in, we want a fix on master without the above commits 
    
    git checkout -b quickfix origin/master # "upstream" is master on origin 
    # fix, commit 
    git push 
    

    隨着push.default等於upstream(或tracking),推會去origin分支。當它等於current時,推送將會到originquickfix分支。

matching設置將更新bare在方案中,一旦已經建立。要建立它,您可以使用git push origin master一次。

然而,upstream設置(或者current)好像它可能是你期待發生什麼更好的匹配,所以你可能想嘗試一下:

# try it once (in Git 1.7.2 and later) 
git -c push.default=upstream push 

# configure it for only this repository 
git config push.default upstream 

# configure it for all repositories that do not override it themselves 
git config --global push.default upstream 

(同樣,如果你是仍然在1.7.4.2之前使用Git,您將需要使用tracking而不是upstream)。

24

此相關的問題的答案對我提供的解決方案......這只是一個愚蠢的錯誤:

記得第一個做出承諾!

https://stackoverflow.com/a/7572252

如果您還沒有提交到本地的回購協議,有什麼好推,但你回來Git的錯誤信息不會幫助你太多。

+6

承諾第一! DOH!謝謝。 Git錯誤信息是垃圾! – doug65536 2014-01-17 00:16:20

1

我用SourceTree git的客戶端,我看到他們的初始提交/推命令是:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master 
相關問題