亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

annuaire recherche
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
personnages

命名

git-svn  -  Subversion版本庫(kù)和Git之間的雙向操作

概要

git svn <command> [options] [arguments]

描述

git svn是Subversion和Git之間變更集的簡(jiǎn)單渠道。它提供了Subversion和Git存儲(chǔ)庫(kù)之間的雙向變化流。

git svn可以跟蹤常見(jiàn)的“trunk / branches / tags”布局,并使用--stdlayout選項(xiàng)來(lái)跟蹤標(biāo)準(zhǔn)的Subversion存儲(chǔ)庫(kù)。它也可以使用-T / -t / -b選項(xiàng)在任何布局中跟隨分支和標(biāo)簽(請(qǐng)參閱init下面的選項(xiàng)以及clone命令)。

一旦跟蹤Subversion存儲(chǔ)庫(kù)(使用上述任何方法),可以通過(guò)fetch命令從Subversion更新Git存儲(chǔ)庫(kù),并通過(guò)命令從Git更新Subversion dcommit。

命令

init

使用其他元數(shù)據(jù)目錄初始化一個(gè)空的Git存儲(chǔ)庫(kù)git svn??梢詫ubversion URL指定為命令行參數(shù),或者將其指定為-T / -t / -b的完整URL參數(shù)?;蛘?,可以將要操作的目標(biāo)目錄指定為第二個(gè)參數(shù)。通常這個(gè)命令初始化當(dāng)前目錄。

-T<trunk_subdir>   --trunk=<trunk_subdir>   -t<tags_subdir>   --tags=<tags_subdir>   -b<branches_subdir>   --branches=<branches_subdir>   -s   --stdlayout

這些是init的可選命令行選項(xiàng)。每個(gè)標(biāo)志都可以指向相對(duì)的存儲(chǔ)庫(kù)路徑(--tags = project / tags)或完整的url(--tags = https://foo.org/project/tags)。您可以指定多個(gè)--tags和/或--branches選項(xiàng),以防Subversion存儲(chǔ)庫(kù)將標(biāo)簽或分支置于多個(gè)路徑下。選項(xiàng)--stdlayout是將trunk,tags,branches設(shè)置為相對(duì)路徑的簡(jiǎn)寫(xiě)方式,這是Subversion的默認(rèn)設(shè)置。如果還有其他任何選項(xiàng),則優(yōu)先。

--no-metadata

noMetadata在svn-remote配置中設(shè)置選項(xiàng)。不建議svn.noMetadata使用此選項(xiàng),請(qǐng)?jiān)谑褂么诉x項(xiàng)之前閱讀該手冊(cè)頁(yè)的部分。

--use-svm-props

useSvmProps在svn-remote配置中設(shè)置選項(xiàng)。

--use-svnsync-props

useSvnsyncProps在svn-remote配置中設(shè)置選項(xiàng)。

--rewrite-root=<URL>

rewriteRoot在svn-remote配置中設(shè)置選項(xiàng)。

--rewrite-uuid=<UUID>

rewriteUUID在svn-remote配置中設(shè)置選項(xiàng)。

--username=<user>

對(duì)于SVN處理(http,https和普通svn)身份驗(yàn)證的傳輸,請(qǐng)指定用戶(hù)名。對(duì)于其他傳輸(例如svn+ssh://),您必須在URL中包含用戶(hù)名,例如svn+ssh://foo@svn.bar.com/project

--prefix=<prefix>

如果指定了trunk / branches / tags,這允許指定一個(gè)前綴作為遠(yuǎn)程名稱(chēng)的前綴。前綴不會(huì)自動(dòng)包含結(jié)尾的斜杠,因此如果這是您想要的,請(qǐng)確保在參數(shù)中包含一個(gè)。如果指定了--branches / -b,則前綴必須包含尾部斜線。在任何情況下都強(qiáng)烈建議設(shè)置前綴(使用尾部斜線),因?yàn)槟腟VN跟蹤引用將位于“refs / remotes / $ prefix / ”,這與Git自己的遠(yuǎn)程跟蹤引用布局兼容(參考文獻(xiàn)/遠(yuǎn)程/ $遠(yuǎn)程/)。如果您希望跟蹤共享公共存儲(chǔ)庫(kù)的多個(gè)項(xiàng)目,那么設(shè)置前綴也很有用。默認(rèn)情況下,前綴設(shè)置為origin/。

注意

在Git v2.0之前,默認(rèn)的前綴是“”(無(wú)前綴)。這意味著SVN跟蹤文件被放在“refs / remotes / *”,這與Git自己的遠(yuǎn)程跟蹤文件的組織方式不兼容。如果你仍然想要舊的默認(rèn)值,可以通過(guò)在命令行上傳遞--prefix“”來(lái)獲得它(如果你的Perl的Getopt :: Long是<v2.37,那么--prefix =“”可能不起作用)。

--ignore-refs=<regex>

當(dāng)傳遞給initclone正則表達(dá)式將被保存為配置密鑰。請(qǐng)參閱fetch有關(guān)說(shuō)明--ignore-refs。

--ignore-paths=<regex>

當(dāng)傳遞給initclone正則表達(dá)式將被保存為配置密鑰。請(qǐng)參閱fetch有關(guān)說(shuō)明--ignore-paths

--include-paths=<regex>

當(dāng)傳遞給initclone正則表達(dá)式將被保存為配置密鑰。請(qǐng)參閱fetch有關(guān)說(shuō)明--include-paths。

--no-minimize-url

當(dāng)跟蹤多個(gè)目錄(使用--stdlayout, -  branch或-tags選項(xiàng))時(shí),git svn將嘗試連接到Subversion存儲(chǔ)庫(kù)的根(或最高允許級(jí)別)。如果整個(gè)項(xiàng)目在存儲(chǔ)庫(kù)中移動(dòng),則此默認(rèn)值允許更好地跟蹤歷史記錄,但可能會(huì)導(dǎo)致存在讀取訪問(wèn)限制的存儲(chǔ)庫(kù)中出現(xiàn)問(wèn)題。傳遞--no-minimize-url將允許git svn按原樣接受URL,而不嘗試連接到更高級(jí)別的目錄。當(dāng)只有一個(gè)URL /分支被跟蹤時(shí),這個(gè)選項(xiàng)默認(rèn)是關(guān)閉的(它不會(huì)有什么好處)。

fetch

從我們正在跟蹤的Subversion遠(yuǎn)程獲取未提取的修訂。$ GIT_DIR / config文件中的svn-remote“...”部分的名稱(chēng)可以指定為可選的命令行參數(shù)。

如果需要,這會(huì)自動(dòng)更新rev_map($GIT_DIR/svn/*\*/.rev_map.*有關(guān)詳細(xì)信息,請(qǐng)參閱下面的FILES部分)。

--localtime

將Git提交時(shí)間存儲(chǔ)在本地時(shí)區(qū)而不是UTC。這使得git log(甚至沒(méi)有--date = local)顯示與svn log當(dāng)?shù)貢r(shí)區(qū)相同的時(shí)間。

這并不妨礙與克隆的Subversion版本庫(kù)的互操作,但如果您希望本地Git存儲(chǔ)庫(kù)能夠與其他人的本地Git存儲(chǔ)庫(kù)互操作,則不要使用此選項(xiàng),或者您都應(yīng)該使用它相同的當(dāng)?shù)貢r(shí)區(qū)。

--parent

僅從當(dāng)前HEAD的SVN父節(jié)點(diǎn)獲取。

--ignore-refs=<regex>

忽略與Perl正則表達(dá)式匹配的分支或標(biāo)記的引用?!柏?fù)面預(yù)測(cè)斷言” ^refs/remotes/origin/(?!tags/wanted-tag|wanted-branch).*$可以用來(lái)僅允許某些參考。

config key: svn-remote.<name>.ignore-refs

如果ignore-refs配置鍵已設(shè)置,并且還提供了命令行選項(xiàng),則將使用這兩個(gè)正則表達(dá)式。

--ignore-paths=<regex>

這允許指定一個(gè)Perl正則表達(dá)式,這會(huì)導(dǎo)致SVN從結(jié)帳中跳過(guò)所有匹配的路徑。該--ignore-paths選項(xiàng)應(yīng)與每一個(gè)fetch(包括自動(dòng)取因clonedcommit,rebase,等)在給定的存儲(chǔ)庫(kù)。

config key: svn-remote.<name>.ignore-paths

如果設(shè)置了ignore-paths配置鍵,并且還給出了命令行選項(xiàng),則將使用這兩個(gè)正則表達(dá)式。

例子:

每次抓取跳過(guò)“doc *”目錄

--ignore-paths="^doc"

跳過(guò)第一級(jí)目錄的“分支”和“標(biāo)簽”

--ignore-paths="^[^/]+/(?:branches|tags)"

--include-paths=<regex>

這樣可以指定一個(gè)Perl正則表達(dá)式,這會(huì)導(dǎo)致只包含從SVN簽出的匹配路徑。該--include-paths選項(xiàng)應(yīng)與每一個(gè)fetch(包括自動(dòng)取因clone,dcommitrebase,等)在給定的存儲(chǔ)庫(kù)。--ignore-paths優(yōu)先--include-paths。

config key: svn-remote.<name>.include-paths

--log-window-size=<n>

掃描Subversion歷史記錄時(shí),每個(gè)請(qǐng)求獲取<n>日志條目。默認(rèn)值為100對(duì)于非常大的Subversion資料庫(kù)中,可能需要較大的值clone/ fetch在合理的時(shí)間內(nèi)完成。但過(guò)大的值可能會(huì)導(dǎo)致更高的內(nèi)存使用量和請(qǐng)求超時(shí)。

clone

運(yùn)行initfetch。它會(huì)根據(jù)傳遞給它的URL的基名自動(dòng)創(chuàng)建一個(gè)目錄; 或者是否傳遞了第二個(gè)參數(shù); 它會(huì)創(chuàng)建一個(gè)目錄并在其中工作。它接受initfetch命令接受的所有參數(shù); 除了--fetch-all--parent。克隆存儲(chǔ)庫(kù)后,該fetch命令將能夠更新修訂版而不影響工作樹(shù); 并且該rebase命令將能夠使用最新更改更新工作樹(shù)。

--preserve-empty-dirs

在本地Git存儲(chǔ)庫(kù)中為從Subversion提取的每個(gè)空目錄創(chuàng)建一個(gè)占位符文件。這包括通過(guò)刪除Subversion存儲(chǔ)庫(kù)中的所有條目(但不包括目錄本身)而變空的目錄。當(dāng)不再需要時(shí),占位符文件也被跟蹤和刪除。

--placeholder-filename=<filename>

設(shè)置由--preserve-empty-dirs創(chuàng)建的占位符文件的名稱(chēng)。默認(rèn):“.gitignore”

rebase

這會(huì)從當(dāng)前HEAD的SVN父節(jié)點(diǎn)獲取修訂,并將當(dāng)前(未提交到SVN)的工作重新綁定到它。

這與其相似svn updategit pull除了它保留了線性歷史記錄git rebase而不是git merge為了方便提交git svn。

這接受所有選項(xiàng)git svn fetchgit rebase接受。但是,--fetch-all只能從當(dāng)前的svn-remote中獲取,而不是所有的svn-remote定義。

git rebase; 這要求工作樹(shù)干凈并且沒(méi)有未提交的更改。

如果需要,這會(huì)自動(dòng)更新rev_map($GIT_DIR/svn/*\*/.rev_map.*有關(guān)詳細(xì)信息,請(qǐng)參閱下面的FILES部分)。

-l   --local

不要遠(yuǎn)程獲取; 僅git rebase針對(duì)上游SVN上次提交的提交運(yùn)行。

dcommit

將當(dāng)前分支中的每個(gè)diff直接提交到SVN存儲(chǔ)庫(kù),然后重新綁定或重置(取決于SVN和head之間是否存在差異)。這將在Git中為每個(gè)提交創(chuàng)建SVN修訂。

當(dāng)一個(gè)可選的Git分支名稱(chēng)(或Git提交對(duì)象名稱(chēng))被指定為參數(shù)時(shí),子命令在指定的分支上工作,而不是在當(dāng)前分支上。

使用dcommit優(yōu)于set-tree(下面)。

--no-rebase

提交后,不要重新設(shè)置或重置。

--commit-url <URL>

提交到這個(gè)SVN URL(完整路徑)。這樣做的目的在于,如果稍后用戶(hù)可以訪問(wèn)替代傳輸方法(例如或)來(lái)提交,那么允許git svn使用一種傳輸方法(例如svn://http://用于匿名讀取)創(chuàng)建的現(xiàn)有存儲(chǔ)庫(kù)被重用。svn+ssh://https://

config key: svn-remote.<name>.commiturl
config key: svn.commiturl (overwrites all svn-remote.<name>.commiturl options)

請(qǐng)注意,commiturl config密鑰的SVN URL包含SVN分支。如果您想為整個(gè)SVN存儲(chǔ)庫(kù)設(shè)置提交URL,請(qǐng)改為使用svn-remote。<name> .pushurl。

使用這個(gè)選項(xiàng)用于任何其他目的(不要問(wèn))非常不鼓勵(lì)。

--mergeinfo=<mergeinfo>

在dcommit(eg --mergeinfo="/branches/foo:1-10")期間添加給定的合并信息。所有的svn服務(wù)器版本都可以存儲(chǔ)這些信息(作為一個(gè)屬性),從1.5版開(kāi)始的svn客戶(hù)端可以使用它。要從多個(gè)分支指定合并信息,請(qǐng)?jiān)诜种еg使用單個(gè)空格字符(--mergeinfo="/branches/foo:1-10 /branches/bar:3,5-6,8"

config key: svn.pushmergeinfo

這個(gè)選項(xiàng)會(huì)導(dǎo)致git-svn在可能的情況下嘗試自動(dòng)填充SVN信息庫(kù)中的svn:mergeinfo屬性。目前,只有在提交非快進(jìn)合并的情況下,只有第一個(gè)父母已經(jīng)被推入SVN的情況下才能完成此操作。

--interactive

要求用戶(hù)確認(rèn)補(bǔ)丁集應(yīng)該實(shí)際發(fā)送給SVN。對(duì)于每個(gè)補(bǔ)丁,可以回答“是”(接受此補(bǔ)?。胺瘛保▉G棄此補(bǔ)?。?,“全部”(接受所有補(bǔ)丁)或“退出”。

git svn dcommit 如果回答為“否”或“退出”,則立即返回,但不向SVN提交任何內(nèi)容。

branch

在SVN存儲(chǔ)庫(kù)中創(chuàng)建一個(gè)分支。

-m   --message

允許指定提交消息。

-t   --tag

通過(guò)使用tags_subdir而不是在git svn init期間指定的branches_subdir創(chuàng)建一個(gè)標(biāo)簽。

-d<path>   --destination=<path>

如果給initor clone命令提供了多個(gè)--branches(或--tags)選項(xiàng),則必須提供您希望在SVN存儲(chǔ)庫(kù)中創(chuàng)建的分支(或標(biāo)簽)的位置。<path>指定用于創(chuàng)建分支或標(biāo)記的路徑,并且應(yīng)該與其中一個(gè)配置的分支或標(biāo)記refspecs的左側(cè)的模式相匹配。您可以使用這些命令查看這些refspecs

git config --get-all svn-remote.<name>.branches
git config --get-all svn-remote.<name>.tags

其中<name>是由-R選項(xiàng)init(默認(rèn)情況下為“svn”)指定的SVN存儲(chǔ)庫(kù)的名稱(chēng)。

--username

指定SVN用戶(hù)名以執(zhí)行提交。該選項(xiàng)覆蓋username配置屬性。

--commit-url

使用指定的URL連接到目標(biāo)Subversion存儲(chǔ)庫(kù)。這在源SVN存儲(chǔ)庫(kù)為只讀的情況下非常有用。該選項(xiàng)覆蓋配置屬性commiturl

git config --get-all svn-remote.<name>.commiturl

--parents

創(chuàng)建父文件夾。此參數(shù)等同于svn cp命令中的參數(shù)--parents,對(duì)于非標(biāo)準(zhǔn)存儲(chǔ)庫(kù)布局非常有用。

tag

在SVN存儲(chǔ)庫(kù)中創(chuàng)建一個(gè)標(biāo)簽。這是一個(gè)簡(jiǎn)寫(xiě)branch -t

log

當(dāng)svn用戶(hù)引用-r /  - 修訂號(hào)時(shí),這應(yīng)該能夠輕松查找svn日志消息。

'svn log'支持以下功能:

-r <n>:<n>   --revision=<n>:<n>

支持,非數(shù)字參數(shù)不是:HEAD,NEXT,BASE,PREV等...

-v   --verbose

它不完全兼容svn日志中的--verbose輸出,但相當(dāng)接近。

--limit=<n>

與--max-count不同,不會(huì)計(jì)入合并/排除提交

--incremental

支持的

新功能:

--show-commit

也顯示了Git commit sha1

--oneline

我們的版本--pretty = oneline

注意

SVN本身只存儲(chǔ)UTC時(shí)間,沒(méi)有別的。常規(guī)svn客戶(hù)端將UTC時(shí)間轉(zhuǎn)換為當(dāng)?shù)貢r(shí)間(或基于TZ =環(huán)境)。該命令具有相同的行為。

任何其他參數(shù)都直接傳遞給 git log

blame

顯示修訂版本和作者上次修改文件的每一行。默認(rèn)情況下,此模式的輸出格式與'svn blame'的輸出格式兼容。像SVN blame命令一樣,工作樹(shù)中的本地未提交更改將被忽略; HEAD修訂版本中的文件版本被注釋。未知參數(shù)直接傳遞給git blame。

--git-format

git blame以與SVN版本號(hào)相同的格式生成輸出,而不是Git提交哈希。在此模式下,尚未提交給SVN的更改(包括本地工作副本編輯)顯示為修訂版0。

find-rev

當(dāng)給定表單的SVN修訂號(hào)時(shí)rN,返回相應(yīng)的Git提交散列(可以選擇后跟一個(gè)tree-ish來(lái)指定應(yīng)該搜索哪個(gè)分支)。當(dāng)給定樹(shù)時(shí),返回相應(yīng)的SVN修訂版號(hào)。

-B   --before

如果給定SVN修訂版,不要求完全匹配,而是在指定修訂版中找到與SVN存儲(chǔ)庫(kù)(在當(dāng)前分支上)相對(duì)應(yīng)的提交。

-A   --after

如果提供SVN修訂版本,則不需要完全匹配; 如果沒(méi)有完全匹配,則返回在歷史中向前搜索的最接近的匹配。

set-tree

你應(yīng)該考慮使用dcommit而不是這個(gè)命令。將指定的提交或樹(shù)對(duì)象提交給SVN。這依賴(lài)于您導(dǎo)入的提取數(shù)據(jù)是最新的。這絕對(duì)不會(huì)嘗試在提交SVN時(shí)進(jìn)行修補(bǔ),它只會(huì)覆蓋樹(shù)中指定的文件或提交的文件。假定所有合并都是獨(dú)立于git svn功能而發(fā)生的。

create-ignore

遞歸查找目錄上的 svn:ignore 屬性并創(chuàng)建匹配的 .gitignore 文件。生成的文件被分階段提交,但未提交。使用 -r /  -  revision 來(lái)引用特定的版本。

show-ignore

遞歸查找并列出目錄上的 svn:ignore 屬性。輸出適用于追加到 $ GIT_DIR / info / exclude 文件。

mkdirs

嘗試根據(jù)$ GIT_DIR / svn / <refname> /unhandled.log文件中的信息重新創(chuàng)建核心 Git 無(wú)法跟蹤的空目錄??漳夸浽谑褂谩癵it svn clone”和“git svn rebase”時(shí)會(huì)自動(dòng)重新創(chuàng)建,因此“mkdirs”適用于諸如“git checkout”或“git reset”之類(lèi)的命令之后。(有關(guān)更多信息,請(qǐng)參見(jiàn) svn-remote。<name> .automkdirs 配置文件選項(xiàng)。)

commit-diff

提交命令行中兩個(gè)樹(shù)型參數(shù)的差異。該命令不依賴(lài)于在git svn init-ed存儲(chǔ)庫(kù)中。這個(gè)命令有三個(gè)參數(shù),(a)原始樹(shù)進(jìn)行區(qū)分,(b)新的樹(shù)結(jié)果,(c)目標(biāo)Subversion存儲(chǔ)庫(kù)的URL。如果您正在使用git svn-aware存儲(chǔ)庫(kù)(已init與之配合使用git svn),則可以省略最后一個(gè)參數(shù)(URL )。這需要-r <revision>選項(xiàng)。

當(dāng)?shù)诙€(gè) tree-ish 表示這樣一個(gè)對(duì)象,或者通過(guò)調(diào)用一個(gè)編輯器(請(qǐng)參閱下面的選項(xiàng))請(qǐng)求時(shí),提交消息直接提供給-mor -F選項(xiàng),或者間接來(lái)自標(biāo)記或提交--edit。

-m <msg>   --message=<msg>

使用給定msg的提交消息。該選項(xiàng)禁用該--edit選項(xiàng)。

-F <filename>   --file=<filename>

從給定的文件中獲取提交消息。該選項(xiàng)禁用該--edit選項(xiàng)。

info

顯示有關(guān)類(lèi)似'svn info'提供的文件或目錄的信息。目前不支持-r /  - 修訂參數(shù)。使用--url選項(xiàng)僅輸出URL:字段的值。

proplist

列出存儲(chǔ)在Subversion存儲(chǔ)庫(kù)中關(guān)于給定文件或目錄的屬性。使用-r /  -  revision來(lái)引用特定的Subversion版本。

propget

獲取作為第一個(gè)參數(shù)給定的Subversion屬性,用于文件。可以使用-r /  -  revision指定特定的修訂版本。

propset

將作為第一個(gè)參數(shù)給出的Subversion屬性設(shè)置為作為第三個(gè)參數(shù)給出的文件的第二個(gè)參數(shù)給出的值。

例子:

git svn propset svn:keywords "FreeBSD=%H" devel/py-tipper/Makefile

這將屬性設(shè)置svn:keywordsFreeBSD=%H該文件devel/py-tipper/Makefile。

show-externals

顯示Subversion外部。使用-r /  -  revision來(lái)指定特定的修訂版本。

gc

壓縮$ GIT_DIR / svn / <refname> /unhandled.log文件并刪除$ GIT_DIR / svn / <refname> / index文件。

reset

取消fetch返回指定修訂的效果。這使您可以重新fetch修訂SVN。通常情況下,SVN修訂版的內(nèi)容不應(yīng)該改變,reset不應(yīng)該有必要。但是,如果SVN權(quán)限發(fā)生變化,或者如果您更改了--ignore-paths選項(xiàng),a fetch可能會(huì)因“未在提交中找到”(文件先前不可見(jiàn))或“校驗(yàn)和不匹配”(錯(cuò)過(guò)修改)而失敗。如果問(wèn)題文件永遠(yuǎn)不能被忽略(使用--ignore-paths),修復(fù)repo的唯一方法就是使用reset。

只有rev_map和refs / remotes / git-svn被更改(請(qǐng)參閱$GIT_DIR/svn/*\*/.rev_map.*下面的FILES部分了解詳細(xì)信息)。跟隨reset一個(gè)fetch然后git resetgit rebase移動(dòng)當(dāng)?shù)胤种У叫碌臉?shù)上。

-r <n>   --revision=<n>

指定要保留的最新版本。以后的所有修訂都會(huì)被丟棄。

-p   --parent

同樣放棄指定的修訂版本,而是保留最近的父版本。

例子:

假設(shè)您在“主”中進(jìn)行了本地更改,但您需要重新提取“r2”。

    r1---r2---r3 remotes/git-svn
                \
                 A---B master

修復(fù)首先導(dǎo)致“r2”不完整的忽略路徑或SVN權(quán)限問(wèn)題。然后:

git svn reset -r2 -p
git svn fetch
    r1---r2'--r3' remotes/git-svn
      \
       r2---r3---A---B master

然后修正“主”與git rebase。不要使用git merge或您的歷史將與未來(lái)不兼容dcommit!

git rebase --onto remotes/git-svn A^ master
    r1---r2'--r3' remotes/git-svn
                \
                 A'--B' master

選項(xiàng)

--shared=(false|true|umask|group|all|world|everybody)   --template=<template_directory>

僅用于該init命令。這些直接傳遞給git init。

-r <arg>   --revision <arg>

fetch命令一起使用。

這允許支持部分/燒灼歷史的修訂范圍。$ NUMBER,$ NUMBER1:$ NUMBER2(數(shù)值范圍),$ NUMBER:HEAD和BASE:$ NUMBER都支持。

這可以使您在運(yùn)行提取時(shí)創(chuàng)建部分鏡像; 但通常不推薦使用,因?yàn)闅v史記錄會(huì)被跳過(guò)并丟失。

  • --stdin

僅用于該set-tree命令。

從stdin中讀取提交列表并按相反順序提交它們。只有領(lǐng)先的sha1從每行讀取,因此git rev-list --pretty=oneline可以使用輸出。

--rmdir

只有用過(guò)的dcommitset-treecommit-diff命令。

如果沒(méi)有文件留下,請(qǐng)從SVN樹(shù)中刪除目錄。SVN可以對(duì)空目錄進(jìn)行版本化,并且如果沒(méi)有剩下文件,它們不會(huì)被默認(rèn)刪除。Git不能版本空目錄。啟用此標(biāo)志將使SVN的行為像Git一樣行事。

config key: svn.rmdir

-e   --edit

只有用過(guò)的dcommit,set-treecommit-diff命令。

在提交SVN之前編輯提交消息。默認(rèn)情況下,對(duì)于提交的對(duì)象是關(guān)閉的,并且在提交樹(shù)對(duì)象時(shí)被強(qiáng)制關(guān)閉。

config key: svn.edit

-l<num>   --find-copies-harder

只有用過(guò)的dcommit,set-treecommit-diff命令。

他們都直接傳遞給git diff-tree; 有關(guān)更多信息,請(qǐng)參閱git-diff-tree [1]。

config key: svn.l
config key: svn.findcopiesharder

-A<filename>   --authors-file=<filename>

語(yǔ)法與下列使用的文件兼容git cvsimport

        loginname = Joe User <user@example.com>

如果指定了此選項(xiàng)并git svn遇到作者文件中不存在的SVN提交者名稱(chēng),git svn則會(huì)中止操作。用戶(hù)將不得不添加適當(dāng)?shù)臈l目。git svn作者文件被修改后重新運(yùn)行前面的命令應(yīng)該繼續(xù)運(yùn)行。

config key: svn.authorsfile

--authors-prog=<filename>

如果指定了此選項(xiàng),則對(duì)于作者文件中不存在的每個(gè)SVN提交者名稱(chēng),將使用提交者名稱(chēng)作為第一個(gè)參數(shù)來(lái)執(zhí)行給定文件。該程序預(yù)計(jì)會(huì)返回一個(gè)形式為“Name <email>”的單行,該行將被視為包含在作者文件中。

config key: svn.authorsProg

-q   --quiet

git svn更簡(jiǎn)潔。再指定一次,使其更加冗長(zhǎng)。

-m   --merge   -s<strategy>   --strategy=<strategy>   -p   --preserve-merges

這些僅用于dcommitrebase命令。

如果a 不能使用,請(qǐng)直接轉(zhuǎn)至git rebase使用時(shí)間(請(qǐng)參閱)。dcommitgit resetdcommit

-n   --dry-run

這可以通過(guò)使用dcommit,rebasebranchtag命令。

對(duì)于dcommit,打印出一系列Git參數(shù),這些參數(shù)將顯示哪些差異將提交給SVN。

對(duì)于rebase顯示與當(dāng)前分支關(guān)聯(lián)的上游svn存儲(chǔ)庫(kù)相關(guān)聯(lián)的本地分支以及將從中獲取的svn存儲(chǔ)庫(kù)的URL。

對(duì)于branchtag,在創(chuàng)建分支或標(biāo)記時(shí)顯示將用于復(fù)制的URL。

--use-log-author

當(dāng)檢索SVN提交到Git的(作為的一部分fetch,rebase或者dcommit操作),找第一From:Signed-off-by:日志消息行和使用,作為作者的字符串。

config key: svn.useLogAuthor

--add-author-from

當(dāng)承諾的SVN混帳(作為的一部分commit-diffset-tree或者dcommit操作),如果現(xiàn)有的日志消息不已經(jīng)有一個(gè)From:Signed-off-by:行,追加一個(gè)From:基于Git的行提交的作者字符串。如果你使用這個(gè),那么--use-log-author將為所有提交檢索一個(gè)有效的作者字符串。

config key: svn.addAuthorFrom

高級(jí)選項(xiàng)

-i<GIT_SVN_ID>   --id <GIT_SVN_ID>

這設(shè)置GIT_SVN_ID(而不是使用環(huán)境)。這允許用戶(hù)覆蓋默認(rèn)的refname以在跟蹤單個(gè)URL時(shí)獲取。的logdcommit命令不再需要此開(kāi)關(guān)作為參數(shù)。

-R<remote name>   --svn-remote <remote name>

指定要使用的svn-remote“<remote name>”部分,這允許SVN多個(gè)存儲(chǔ)庫(kù)被跟蹤。默認(rèn)值:“svn”

--follow-parent

如果我們跟蹤分支(使用存儲(chǔ)庫(kù)布局選項(xiàng)之一--trunk,--tags, -  branch,--stdlayout),此選項(xiàng)才相關(guān)。對(duì)于每個(gè)追蹤分支,嘗試找出其修訂版本從哪里復(fù)制而來(lái),并在分支的第一個(gè)Git提交中設(shè)置合適的父代。當(dāng)我們跟蹤已在存儲(chǔ)庫(kù)中移動(dòng)的目錄時(shí),這非常有用。如果此功能被禁用,則由所創(chuàng)建的分支git svn將全部為線性,并且不共享任何歷史記錄,這意味著將不會(huì)有關(guān)于分支分支或合并的信息。但是,長(zhǎng)時(shí)間/復(fù)雜的歷史記錄可能需要很長(zhǎng)時(shí)間,因此禁用此功能可能會(huì)加速克隆過(guò)程。此功能默認(rèn)啟用,請(qǐng)使用--no-follow-parent將其禁用。

config key: svn.followparent

配置文件專(zhuān)用選項(xiàng)

svn.noMetadata   svn-remote.<name>.noMetadata

這可以git-svn-id:在每次提交結(jié)束時(shí)刪除這些行。

此選項(xiàng)只能用于一次導(dǎo)入,因?yàn)?code>git svn如果沒(méi)有元數(shù)據(jù),將無(wú)法再次獲取。此外,如果您丟失了$GIT_DIR/svn/*\*/.rev_map.*文件,git svn將無(wú)法重建它們。

這個(gè)git svn log命令也不會(huì)在使用它的存儲(chǔ)庫(kù)上工作。這與使用useSvmProps(希望)顯而易見(jiàn)的原因相矛盾。

不推薦使用此選項(xiàng),因?yàn)檫@會(huì)導(dǎo)致難以在現(xiàn)有文檔,錯(cuò)誤報(bào)告和歸檔中追蹤對(duì)SVN修訂號(hào)的舊引用。如果你打算最終從SVN遷移到Git,并確定要?jiǎng)h除SVN歷史記錄,請(qǐng)考慮使用git-filter-branch [1]。filter-branch還允許重新格式化元數(shù)據(jù),以便讀取和重寫(xiě)非“svn.authorsFile”用戶(hù)的作者信息。

svn.useSvmProps   svn-remote.<name>.useSvmProps

這允許git svn從使用SVN :: Mirror(或svk)為元數(shù)據(jù)創(chuàng)建的鏡像中重新映射存儲(chǔ)庫(kù)URL和UUID。

如果一個(gè)SVN修訂版有一個(gè)屬性“svm:headrev”,那么修改可能是由SVN :: Mirror(也被SVK使用)創(chuàng)建的。該屬性包含存儲(chǔ)庫(kù)UUID和修訂版。我們希望使它看起來(lái)像我們鏡像原始URL,因此引入一個(gè)幫助函數(shù),該函數(shù)返回原始標(biāo)識(shí)URL和UUID,并在提交消息中生成元數(shù)據(jù)時(shí)使用它。

svn.useSvnsyncProps   svn-remote.<name>.useSvnsyncprops

類(lèi)似于useSvmProps選項(xiàng); 這是針對(duì)隨SVN 1.4.x及更高版本分發(fā)的svnsync(1)命令的用戶(hù)。

svn-remote.<name>.rewriteRoot

這允許用戶(hù)從備用URL創(chuàng)建存儲(chǔ)庫(kù)。例如,管理員可以git svn在本地運(yùn)行服務(wù)器(通過(guò)file://訪問(wèn)),但希望在元數(shù)據(jù)中使用公共http://或svn:// URL分發(fā)存儲(chǔ)庫(kù),以便用戶(hù)可以看到公共URL 。

svn-remote.<name>.rewriteUUID

類(lèi)似于useSvmProps選項(xiàng); 這適用于需要手動(dòng)重新映射UUID的用戶(hù)。在原始UUID無(wú)法通過(guò)useSvmProps或useSvnsyncProps獲得的情況下,這可能會(huì)很有用。

svn-remote.<name>.pushurl

與Git類(lèi)似remote.<name>.pushurl,此密鑰旨在用于url通過(guò)只讀傳輸指向SVN存儲(chǔ)庫(kù)以提供備用讀/寫(xiě)傳輸?shù)那闆r。假定兩個(gè)鍵都指向同一個(gè)存儲(chǔ)庫(kù)。不像commiturl,pushurl是一個(gè)基本路徑。如果使用commiturlpushurl可以使用,commiturl則優(yōu)先。

svn.brokenSymlinkWorkaround

這將禁用潛在的昂貴檢查來(lái)解決由破碎的客戶(hù)端檢入到SVN中的損壞的符號(hào)鏈接。如果您跟蹤具有許多空符號(hào)鏈接的SVN存儲(chǔ)庫(kù),請(qǐng)將此選項(xiàng)設(shè)置為“false”。該選項(xiàng)可以在git svn運(yùn)行時(shí)更改,并在下一個(gè)修訂版本生效。如果未設(shè)置,則git svn假定此選項(xiàng)為“true”。

svn.pathnameencoding

這指示git svn重新編碼給定編碼的路徑名。它可以被Windows用戶(hù)和非UTF8語(yǔ)言環(huán)境中的用戶(hù)使用,以避免使用非ASCII字符損壞的文件名。有效的編碼是Perl的Encode模塊支持的編碼。

svn-remote.<name>.automkdirs

通常,“git svn clone”和“git svn rebase”命令會(huì)嘗試重新創(chuàng)建Subversion存儲(chǔ)庫(kù)中的空目錄。如果此選項(xiàng)設(shè)置為“false”,則只有在顯式運(yùn)行“git svn mkdirs”命令時(shí)才會(huì)創(chuàng)建空目錄。如果未設(shè)置,則git svn假定此選項(xiàng)為“true”。

由于noMetadata,rewriteRoot,rewriteUUID,useSvnsyncProps和useSvmProps選項(xiàng)都會(huì)影響生成和使用的元數(shù)據(jù)git svn; 它們必須在導(dǎo)入任何歷史記錄之前在配置文件中設(shè)置,并且這些設(shè)置一旦設(shè)置就不會(huì)被更改。

此外,每個(gè)svn-remote部分只能使用其中一個(gè)選項(xiàng),因?yàn)樗鼈儠?huì)影響git-svn-id:元數(shù)據(jù)行,但可以一起使用的rewriteRoot和rewriteUUID除外。

基本的例子

跟蹤和貢獻(xiàn)Subversion管理項(xiàng)目的主干(忽略標(biāo)簽和分支):

# Clone a repo (like git clone):
        git svn clone http://svn.example.com/project/trunk
# Enter the newly cloned directory:
        cd trunk
# You should be on master branch, double-check with 'git branch'
        git branch
# Do some work and commit locally to Git:
        git commit ...# Something is committed to SVN, rebase your local changes against the
# latest changes in SVN:
        git svn rebase
# Now commit your changes (that were committed previously using Git) to SVN,# as well as automatically updating your working HEAD:
        git svn dcommit
# Append svn:ignore settings to the default Git exclude file:
        git svn show-ignore >> .git/info/exclude

跟蹤和貢獻(xiàn)整個(gè)Subversion管理的項(xiàng)目(包含干線,標(biāo)簽和分支):

# Clone a repo with standard SVN directory layout (like git clone):
        git svn clone http://svn.example.com/project --stdlayout --prefix svn/# Or, if the repo uses a non-standard directory layout:
        git svn clone http://svn.example.com/project -T tr -b branch -t tag --prefix svn/# View all branches and tags you have cloned:
        git branch -r
# Create a new branch in SVN
        git svn branch waldo
# Reset your master to trunk (or any other branch, replacing 'trunk'# with the appropriate name):
        git reset --hard svn/trunk
# You may only dcommit to one branch/tag/trunk at a time.  The usage
# of dcommit/rebase/show-ignore should be the same as above.

初始化git svn clone可能非常耗時(shí)(尤其是對(duì)于大型的Subversion版本庫(kù))。如果多個(gè)人(或多個(gè)機(jī)器的一個(gè)人)想要用于git svn與同一Subversion存儲(chǔ)庫(kù)進(jìn)行交互,則可以將初始信息git svn clone寫(xiě)入服務(wù)器上的存儲(chǔ)庫(kù),并讓每個(gè)人都使用以下內(nèi)容克隆該存儲(chǔ)庫(kù)git clone

# Do the initial import on a server
        ssh server "cd /pub && git svn clone http://svn.example.com/project [options...]"# Clone locally - make sure the refs/remotes/ space matches the server
        mkdir project
        cd project
        git init
        git remote add origin server:/pub/project
        git config --replace-all remote.origin.fetch '+refs/remotes/*:refs/remotes/*'
        git fetch
# Prevent fetch/pull from remote Git server in the future,# we only want to use git svn for future updates
        git config --remove-section remote.origin
# Create a local branch from one of the branches just fetched
        git checkout -b master FETCH_HEAD
# Initialize 'git svn' locally (be sure to use the same URL and
# --stdlayout/-T/-b/-t/--prefix options as were used on server)
        git svn init http://svn.example.com/project [options...]# Pull the latest changes from Subversion
        git svn rebase

Rebase vs. pull/merge

喜歡使用git svn rebasegit rebase,而不是git pullgit merge以非整合的提交與同步git svn分支。這樣做會(huì)使未集成的提交歷史與上游SVN存儲(chǔ)庫(kù)保持線性關(guān)系,并允許使用首選的git svn dcommit子命令將未集成的提交推回到SVN中。

最初,git svn建議開(kāi)發(fā)商從git svn分支機(jī)構(gòu)撤出或合并。這是因?yàn)樽髡邇A向于git svn set-tree B提交一個(gè)單獨(dú)的頭部而不是git svn set-tree A..B標(biāo)記來(lái)提交多個(gè)提交。使用git pullgit merge使用git svn set-tree A..B會(huì)導(dǎo)致觸犯到SVN時(shí)被壓扁的非線性歷史,這可能導(dǎo)致合并提交意外扭轉(zhuǎn)了以前的SVN提交。

Merge tracking

雖然git svn可以追蹤采用標(biāo)準(zhǔn)布局的存儲(chǔ)庫(kù)的復(fù)制歷史記錄(包括分支和標(biāo)簽),但它還不能代表SVT用戶(hù)在git上游發(fā)生的合并歷史記錄。因此,建議用戶(hù)在Git中保持歷史盡可能線性,以便與SVN兼容(請(qǐng)參閱下面的CAVEATS部分)。

Handling of svn branches

如果git svn配置為獲取分支(并且--follow分支有效),它有時(shí)會(huì)為一個(gè)SVN分支創(chuàng)建多個(gè)Git分支,其中附加分支具有表單名稱(chēng)branchname@nnn(其中nnn為SVN修訂版號(hào))。如果git svn在SVN分支中找不到第一次提交的父提交,則將創(chuàng)建這些附加分支,以將分支連接到其他分支的歷史記錄。

通常情況下,SVN分支中的第一次提交由復(fù)制操作組成。git svn將讀取此提交以獲取分支創(chuàng)建的SVN修訂。然后它將嘗試找到與此SVN修訂版相對(duì)應(yīng)的Git提交,并將其用作分支的父代。但是,有可能沒(méi)有合適的Git提交作為父代。除此之外,如果SVN分支是未被獲取的修訂副本git svn(例如,因?yàn)樗桥f版本而被跳過(guò)--revision),或者在SVN中復(fù)制的目錄未被跟蹤git svn(比如根本沒(méi)有跟蹤的分支,或者被跟蹤分支的子目錄)。在這些情況下,git svn仍然會(huì)創(chuàng)建一個(gè)Git分支,但不是使用現(xiàn)有的Git提交作為分支的父代,它會(huì)讀取分支復(fù)制的目錄的SVN歷史記錄,并創(chuàng)建適當(dāng)?shù)腉it提交。這由消息“Initializing parent:<branchname>”表示。

另外,它會(huì)創(chuàng)建一個(gè)名為特殊分支<branchname>@<SVN-Revision>,其中<SVN-Revision>是該分支從其復(fù)制的SVN修訂號(hào)。這個(gè)分支將指向分支的新創(chuàng)建的父提交。如果在SVN中該分支已被刪除,并稍后從不同版本重新創(chuàng)建,則會(huì)有多個(gè)這樣的分支@

請(qǐng)注意,這可能意味著為單個(gè)SVN修訂版創(chuàng)建了多個(gè)Git提交。

一個(gè)例子:在一個(gè)具有標(biāo)準(zhǔn)trunk / tags / branches布局的SVN倉(cāng)庫(kù)中,在r.100中創(chuàng)建一個(gè)目錄trunk / sub。在r.200中,trunk / sub通過(guò)將其復(fù)制到分支/來(lái)進(jìn)行分支。git svn clone -s然后將創(chuàng)建一個(gè)分支sub。它還將為r.100到r.199創(chuàng)建新的Git提交并將其用作分支的歷史記錄sub。因此,從r.100到r.199的每個(gè)修訂將有兩個(gè)Git提交(其中一個(gè)包含trunk /,一個(gè)包含trunk / sub /)。最后,它會(huì)創(chuàng)建一個(gè)分支,sub@200指向分支的新的父提交sub(即提交r.200和trunk / sub /)。

Caveats

為簡(jiǎn)單起見(jiàn),并與Subversion互操作,則建議所有git svn用戶(hù)克隆,提取和dcommit直接從SVN服務(wù)器,并避免所有git clone/ pull/ merge/ pushGit存儲(chǔ)區(qū)和支路之間的操作。GIT中分支和用戶(hù)之間交換代碼的推薦的方法是git format-patchgit am,或只是“dcommit'ing至SVN庫(kù)。

正在運(yùn)行git mergegit pull不建議您計(jì)劃dcommit從分支機(jī)構(gòu)運(yùn)行,因?yàn)镾ubversion用戶(hù)無(wú)法看到您所做的任何合并。此外,如果您從SVN分支的鏡像Git分支合并或拉出,dcommit可能會(huì)提交到錯(cuò)誤的分支。

如果您合并,請(qǐng)注意以下規(guī)則:git svn dcommit將嘗試提交在名為in的SVN提交之上

git log --grep=^git-svn-id: --first-parent -1

must因此,您確保您想要提交的分支的最近提交是first合并的父代。否則就會(huì)出現(xiàn)混亂,尤其是如果第一個(gè)父代在同一個(gè)SVN分支上是較舊的提交。

git clone不會(huì)在refs / remotes /層次結(jié)構(gòu)或任何git svn元數(shù)據(jù)或配置下克隆分支。因此,如果要完成克隆,使用創(chuàng)建和管理的存儲(chǔ)庫(kù)git svn應(yīng)該rsync用于克隆。

由于dcommit內(nèi)部使用重訂,任何的Git分支您git push之前dcommit就需要迫使現(xiàn)有裁判的覆蓋上的遠(yuǎn)程存儲(chǔ)庫(kù)。這通常被認(rèn)為是不好的做法,詳情請(qǐng)參閱git-push [1]文檔。

不要在您已經(jīng)提交的更改中使用git-commit [1]的--amend選項(xiàng)。對(duì)于已經(jīng)推送到其他用戶(hù)的遠(yuǎn)程存儲(chǔ)庫(kù)的驗(yàn)證提交被認(rèn)為是不好的做法,而使用SVN的dcommit與此類(lèi)似。

克隆SVN倉(cāng)庫(kù)時(shí),如果沒(méi)有使用描述倉(cāng)庫(kù)布局的選項(xiàng)(--trunk,--tags, -  branch,--stdlayout),git svn clone將創(chuàng)建一個(gè)完全線性歷史記錄的Git倉(cāng)庫(kù),其中分支和標(biāo)簽在工作副本中顯示為單獨(dú)的目錄。雖然這是獲取完整存儲(chǔ)庫(kù)副本的最簡(jiǎn)單方法,但對(duì)于擁有多個(gè)分支的項(xiàng)目,它將導(dǎo)致工作副本比主干大很多倍。因此,對(duì)于使用標(biāo)準(zhǔn)目錄結(jié)構(gòu)(中繼/分支/標(biāo)簽)的項(xiàng)目,建議使用選項(xiàng)進(jìn)行克隆--stdlayout。如果項(xiàng)目使用非標(biāo)準(zhǔn)結(jié)構(gòu),并且/或者不需要分支和標(biāo)簽,則只需克隆一個(gè)目錄(通常為主干)即可,而無(wú)需提供任何存儲(chǔ)庫(kù)布局選項(xiàng)。如果需要帶分支和標(biāo)簽的完整歷史記錄,則必須使用選項(xiàng)--trunk/ --branches/ --tags。

當(dāng)使用多分支或 - 標(biāo)簽時(shí),git svn不會(huì)自動(dòng)處理名稱(chēng)沖突(例如,如果來(lái)自不同路徑的兩個(gè)分支具有相同名稱(chēng),或者分支和標(biāo)簽具有相同名稱(chēng))。在這些情況下,使用init設(shè)置您的Git存儲(chǔ)庫(kù),然后在第一次之前fetch編輯$ GIT_DIR / config文件,以便分支和標(biāo)簽與不同的名稱(chēng)空間相關(guān)聯(lián)。例如:

branches = stable/*:refs/remotes/svn/stable/*
branches = debug/*:refs/remotes/svn/debug/*

Bugs

我們忽略除svn:executable之外的所有SVN屬性。任何未處理的屬性都會(huì)記錄到$ GIT_DIR / svn / <refname> /unhandled.log

重命名和復(fù)制的目錄不會(huì)被Git檢測(cè)到,因此在提交SVN時(shí)不會(huì)被跟蹤。我不打算增加對(duì)此的支持,因?yàn)闉樗锌赡艿慕锹浒咐ぷ魇欠浅@щy和耗時(shí)的(Git也沒(méi)有這樣做)。完全支持提交重命名和復(fù)制的文件,只要它們足夠類(lèi)似于Git來(lái)檢測(cè)它們即可。

在SVN中,可以(雖然不鼓勵(lì))對(duì)標(biāo)簽提交更改(因?yàn)闃?biāo)簽只是目錄副本,因此在技術(shù)上與分支相同)??寺VN存儲(chǔ)庫(kù)時(shí),git svn不知道將來(lái)是否會(huì)對(duì)此標(biāo)簽進(jìn)行提交。因此,它保守地行事,并將所有SVN標(biāo)簽作為分支導(dǎo)入,以標(biāo)簽名稱(chēng)作為前綴tags/

組態(tài)

git svn將svn-remote配置信息存儲(chǔ)在存儲(chǔ)庫(kù)$ GIT_DIR / config文件中。它類(lèi)似于核心的Git遠(yuǎn)程部分,但fetch鍵不接受glob參數(shù); 但它們是由branchestags鍵來(lái)處理的。由于一些SVN存儲(chǔ)庫(kù)奇怪地配置了多個(gè)項(xiàng)目glob擴(kuò)展,允許使用下面列出的項(xiàng)目:

[svn-remote "project-a"]
        url = http://server.org/svn
        fetch = trunk/project-a:refs/remotes/project-a/trunk
        branches = branches/*/project-a:refs/remotes/project-a/branches/*
        branches = branches/release_*:refs/remotes/project-a/branches/release_*
        branches = branches/re*se:refs/remotes/project-a/branches/*
        tags = tags/*/project-a:refs/remotes/project-a/tags/*

請(qǐng)記住,*本地引用(:*)右邊的(星號(hào))通配符必須是最右邊的正確路徑組件; 但是,只要遠(yuǎn)程通配符是獨(dú)立路徑組件(由/EOL 包圍),遠(yuǎn)程通配符就可以在任何地方。這種類(lèi)型的配置不會(huì)自動(dòng)創(chuàng)建init,應(yīng)該使用文本編輯器或使用手動(dòng)輸入git config。

另請(qǐng)注意,每個(gè)單詞只允許使用一個(gè)星號(hào)。例如:

branches = branches/re*se:refs/remotes/project-a/branches/*

將匹配樹(shù)枝release,resere123se然而,

branches = branches/re*s*e:refs/remotes/project-a/branches/*

會(huì)產(chǎn)生一個(gè)錯(cuò)誤。

也可以通過(guò)在大括號(hào)中使用逗號(hào)分隔的名稱(chēng)列表來(lái)獲取分支或標(biāo)簽的子集。例如:

[svn-remote "huge-project"]
        url = http://server.org/svn
        fetch = trunk/src:refs/remotes/trunk
        branches = branches/{red,green}/src:refs/remotes/project-a/branches/*
        tags = tags/{1.0,2.0}/src:refs/remotes/project-a/tags/*

支持多個(gè)提取,分支和標(biāo)簽密鑰:

[svn-remote "messy-repo"]
        url = http://server.org/svn
        fetch = trunk/project-a:refs/remotes/project-a/trunk
        fetch = branches/demos/june-project-a-demo:refs/remotes/project-a/demos/june-demo
        branches = branches/server/*:refs/remotes/project-a/branches/*
        branches = branches/demos/2011/*:refs/remotes/project-a/2011-demos/*
        tags = tags/server/*:refs/remotes/project-a/tags/*

在這種配置中創(chuàng)建分支需要使用-d或--destination標(biāo)志來(lái)消除使用哪個(gè)位置:

$ git svn branch -d branches/server release-2-3-0

請(qǐng)注意,git-svn會(huì)跟蹤出現(xiàn)分支或標(biāo)記的最高版本。如果分支或標(biāo)簽的子集在獲取后發(fā)生更改,則必須手動(dòng)編輯$ GIT_DIR / svn / .metadata以根據(jù)需要?jiǎng)h除(或重置)分支-maxRev和/或tags-maxRev。

Files

$GIT_DIR/svn/*\*/.rev_map.*

Subversion版本號(hào)和Git提交名之間的映射。在沒(méi)有設(shè)置noMetadata選項(xiàng)的存儲(chǔ)庫(kù)中,可以從每次提交結(jié)束時(shí)的git-svn-id:行重新創(chuàng)建(參見(jiàn)svn.noMetadata上面的細(xì)節(jié)部分)。

git svn fetchgit svn rebase自動(dòng)更新rev_map,如果它丟失或不是最新的。git svn reset自動(dòng)倒帶它。

Article précédent: Article suivant: