<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://jiva.dila.edu.tw/index.php?action=history&amp;feed=atom&amp;title=Pro_Git_9.5_The_Refspec</id>
	<title>Pro Git 9.5 The Refspec - 修訂歷史</title>
	<link rel="self" type="application/atom+xml" href="https://jiva.dila.edu.tw/index.php?action=history&amp;feed=atom&amp;title=Pro_Git_9.5_The_Refspec"/>
	<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_9.5_The_Refspec&amp;action=history"/>
	<updated>2026-05-09T02:46:00Z</updated>
	<subtitle>本 Wiki 上此頁面的修訂歷史</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://jiva.dila.edu.tw/index.php?title=Pro_Git_9.5_The_Refspec&amp;diff=593&amp;oldid=prev</id>
		<title>imported&gt;Ray：​新頁面: 這本書讀到這裡，你已經使用過一些簡單的遠端分支到本地引用的映射方式了，這種映射可以更為複雜。假設你像這樣添加了一項遠端倉庫： ...</title>
		<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_9.5_The_Refspec&amp;diff=593&amp;oldid=prev"/>
		<updated>2011-06-27T06:34:53Z</updated>

		<summary type="html">&lt;p&gt;新頁面: 這本書讀到這裡，你已經使用過一些簡單的遠端分支到本地引用的映射方式了，這種映射可以更為複雜。假設你像這樣添加了一項遠端倉庫： ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;這本書讀到這裡，你已經使用過一些簡單的遠端分支到本地引用的映射方式了，這種映射可以更為複雜。假設你像這樣添加了一項遠端倉庫：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git remote add origin git@github.com:schacon/simplegit-progit.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
它在你的 .git/config 檔中添加了一節，指定了遠程的名稱 (origin), 遠程倉庫的 URL 地址，和用於獲取(fetch)操作的 Refspec:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
[remote &amp;quot;origin&amp;quot;]&lt;br /&gt;
       url = git@github.com:schacon/simplegit-progit.git&lt;br /&gt;
       fetch = +refs/heads/*:refs/remotes/origin/*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refspec 的格式是一個可選的 + 號，接著是 &amp;lt;src&amp;gt;:&amp;lt;dst&amp;gt; 的格式，這裡 &amp;lt;src&amp;gt; 是遠端上的引用格式， &amp;lt;dst&amp;gt; 是將要記錄在本地的引用格式。可選的 + 號告訴 Git 在即使不能快速演進的情況下，也去強制更新它。&lt;br /&gt;
&lt;br /&gt;
預設情況下 refspec 會被 git remote add 命令所自動生成， Git 會獲取遠端上 refs/heads/ 下面的所有引用，並將它寫入到本地的 refs/remotes/origin/. 所以，如果遠端上有一個 master 分支，你在本地可以通過下面這種方式來訪問它的歷史記錄：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git log origin/master&lt;br /&gt;
$ git log remotes/origin/master&lt;br /&gt;
$ git log refs/remotes/origin/master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
它們全是等價的，因為 Git 把它們都擴展成 refs/remotes/origin/master.&lt;br /&gt;
&lt;br /&gt;
如果你想讓 Git 每次只拉取遠端的 master 分支，而不是遠端的所有分支，你可以把 fetch 這一行修改成這樣：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
fetch = +refs/heads/master:refs/remotes/origin/master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
這是 git fetch 操作對這個遠端的預設 refspec 值。而如果你只想做一次該操作，也可以在命令列上指定這個 refspec. 如可以這樣拉取遠端的 master 分支到本地的 origin/mymaster 分支：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git fetch origin master:refs/remotes/origin/mymaster&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
你也可以在命令列上指定多個 refspec. 像這樣可以一次獲取遠端的多個分支：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git fetch origin master:refs/remotes/origin/mymaster \&lt;br /&gt;
   topic:refs/remotes/origin/topic&lt;br /&gt;
From git@github.com:schacon/simplegit&lt;br /&gt;
 ! [rejected]        master     -&amp;gt; origin/mymaster  (non fast forward)&lt;br /&gt;
 * [new branch]      topic      -&amp;gt; origin/topic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在這個例子中， master 分支因為不是一個可以快速演進的引用而拉取操作被拒絕。你可以在 refspec 之前使用一個 + 號來重載這種行為。&lt;br /&gt;
&lt;br /&gt;
你也可以在設定檔中指定多個 refspec. 如你想在每次獲取時都獲取 master 和 experiment 分支，就添加兩行：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
[remote &amp;quot;origin&amp;quot;]&lt;br /&gt;
       url = git@github.com:schacon/simplegit-progit.git&lt;br /&gt;
       fetch = +refs/heads/master:refs/remotes/origin/master&lt;br /&gt;
       fetch = +refs/heads/experiment:refs/remotes/origin/experiment&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
但是這裡不能使用部分萬用字元，像這樣就是不合法的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
fetch = +refs/heads/qa*:refs/remotes/origin/qa*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
但無論如何，你可以使用命名空間來達到這個目的。如你有一個QA組，他們推送一系列分支，你想每次獲取 master 分支和QA組的所有分支，你可以使用這樣的配置段落：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
[remote &amp;quot;origin&amp;quot;]&lt;br /&gt;
       url = git@github.com:schacon/simplegit-progit.git&lt;br /&gt;
       fetch = +refs/heads/master:refs/remotes/origin/master&lt;br /&gt;
       fetch = +refs/heads/qa/*:refs/remotes/origin/qa/*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果你的工作流很複雜，有QA組推送的分支、開發人員推送的分支、和集成人員推送的分支，並且他們在遠端分支上協作，你可以採用這種方式為他們創建各自的命名空間。&lt;br /&gt;
&lt;br /&gt;
=推送 Refspec=&lt;br /&gt;
&lt;br /&gt;
採用命名空間的方式確實很棒，但QA組成員第1次是如何將他們的分支推送到 qa/ 空間裡面的呢？答案是你可以使用 refspec 來推送。&lt;br /&gt;
&lt;br /&gt;
如果QA組成員想把他們的 master 分支推送到遠端的 qa/master 分支上，可以這樣運行：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git push origin master:refs/heads/qa/master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果他們想讓 Git 每次運行 git push origin 時都這樣自動推送，他們可以在設定檔中添加 push 值：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
[remote &amp;quot;origin&amp;quot;]&lt;br /&gt;
       url = git@github.com:schacon/simplegit-progit.git&lt;br /&gt;
       fetch = +refs/heads/*:refs/remotes/origin/*&lt;br /&gt;
       push = refs/heads/master:refs/heads/qa/master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
這樣，就會讓 git push origin 預設就把本地的 master 分支推送到遠端的 qa/master 分支上。&lt;br /&gt;
&lt;br /&gt;
=刪除引用(References)=&lt;br /&gt;
&lt;br /&gt;
你也可以使用 refspec 來刪除遠端的引用，是通過執行這樣的命令：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git push origin :topic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
因為 refspec 的格式是 &amp;lt;src&amp;gt;:&amp;lt;dst&amp;gt;, 通過把 &amp;lt;src&amp;gt; 部分留空的方式，這個意思是是把遠端的 topic 分支變成空，也就是刪除它。&lt;/div&gt;</summary>
		<author><name>imported&gt;Ray</name></author>
	</entry>
</feed>