簡體   English   中英

如何在git-svn中設置上游分支?

[英]How to set upstream branch in git-svn?

在使用常規git存儲庫時,本地分支通常會跟蹤相應的遠程上游分支。 通過這種方式,我可以輕松地看到自己是在上游分支的前面還是后面,以及是否需要推動或拉動它們以使其同步。 另外,我的提示會立即顯示此狀態,這非常方便。

現在,我正在使用git-svn在SVN存儲庫中工作。 我為克隆使用了--prefix=svn ,因此git branch -rsvn/trunk列為遠程分支,但是(盡管git svn rebase可以正常工作),但沒有將其配置為我的master分支的上游分支。

我嘗試手動設置跟蹤信息,但失敗了:

$ git branch -r
  svn/trunk
$ git branch --set-upstream-to=svn/trunk
fatal: Cannot setup tracking information; starting point 'svn/trunk' is not a branch.

有什么方法可以跟蹤svn上游分支嗎?

還有其他簡單的方法可以知道我在該分支機構之前還是之后嗎? (查看gitk --all是我目前所知的唯一方法。)

什至還有某種方法可以使我的(bash __git_ps1 )提示符顯示該信息?


$ git --version
git version 1.9.0.msysgit.0

這似乎是git 1.9中引入的錯誤,因為--set-upstream-to完全按照您提到的方式工作。
並且strace顯示上游分支ref的正確定位和讀取,但是由於某種原因它被忽略了。


對於這個問題,我的解決方法是手動編輯 .git/config

$ cat >> .git/config << EOF

[branch "master"]
        remote = .
        merge = refs/svn/trunk
        rebase = true
EOF

應該等於:

git branch --set-upstream-to=svn/trunk master

&& git config branch.master.rebase true (無論如何,您都希望使用svn)

-但不是,因為有錯誤! “我的refs/svn/trunk當然一個分支!” 您說,然后直接編輯配置(只需輕輕一點即可)。

您的svn干線在git中的名稱可能不同,具體取決於您克隆存儲庫的方式( git svn clone -s-T ,-- --prefix選項)。 只需執行git branch -avv並找到正確的git branch -avv 例如,一個可能的名稱是refs/remotes/git-svn 或上面的refs/svn/trunk 甚至其他的東西。


2015年11月更新

我仍然在git version 2.1.4上重現此內容。 有人要提交錯誤報告嗎?

git-svn將配置數據存儲在.git/config ,例如在我的一個倉庫中,配置就像:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = http://svn.repo.com/repos/myrepo
    fetch = trunk:refs/remotes/trunk
    branches = branches/*:refs/remotes/*
    tags = tags/*:refs/remotes/tags/*

[svn-remote "svn"]部分中,您可以看到所有的git-svn配置。 在“ branches部分中,您將看到遠程svn庫上的所有分支。

當我需要在本地git repo中遵循svn分支時,通常會執行以下步驟:

  1. 我檢查config是否正確配置了所有branchestags
  2. 我執行git svn fetch ,這樣git將為所有分支取回倉庫中的所有數據。
  3. 我檢查所有branches / tags是否作為git branch -a輸出存在,​​例如:

     master prod scenarioParametro remotes/tags/alpha-1 remotes/trunk 
  4. 我創建一個本地git branch來跟蹤具有以下內容的遠程branch

     git branch alpha-1 remotes/tags/alpha-1 --track 

這樣,新創建的alpha-1分支將遵循remotes/tags/alpha-1 ,您可以執行rebasedcommit命令。

這對我使用git 1.9.5仍然是一個問題。

而且我沒有得到這里提到的任何解決方案,但是可以正常工作:

git rebase origin/remote-branch-name

之后, git svn dcommit -n顯示它確實將提交到該svn分支。


更新 :我又遇到了同樣的問題,這一次以上沒有奏效。 我剛收到消息: Current branch master is up to date. 但是使用:

git rebase -i origin/remote-branch-name

無論如何都強制重新設置基准,然后正確設置了上游。

由於沒有人回答:

還有其他簡單的方法可以知道我在該分支機構之前還是之后嗎?

是的。 在這種情況下,您也可以使用GIT用於比較引用的一般概念。 這是ref_from..ref_to

例如:

git log master..svn/trunk –將為您提供svn/trunk中所有master丟失的提交。 迎接變化

git log svn/trunk..master –將為您提供svn/trunk中缺少的所有master提交。 外向的變化

通用語法的進一步說明: 在此處以及官方GIT文檔中

暫無
暫無

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

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