我剛開始使用git,我有一個問題。我的應用程序有10個其他開發人員在工作,每個人都有自己的分支,如dev_XXXXX。因此,如果我對存儲庫進行克隆,那麼是否將他們的所有代碼複製到我的機器上?在那種情況下,我不想要那個。假設我的分支是dev_swamy,那麼我如何克隆穩定分支和dev_swamy?謝謝。克隆git中的stable和其他分支?
回答
默認git clone
將取所有分支,但這些分支將被存儲的遠程跟蹤分支:例如分支「dev_XXXXX」將被存儲爲「原點/ dev_XXXXX」(與「參/遙控器/原點/ dev_XXXXX'作爲全名)。這些遠程跟蹤分支在git branch
輸出中不可見:您需要git branch -r
列出遠程跟蹤分支(或git branch -a
列出所有分支)。如果這些分支與主線不會有太大分歧,那麼它們不會在存儲庫中佔用太多的磁盤空間。因此我不明白你爲什麼只想克隆選定的分支。
不過,如果你想與只有兩個選擇分支的克隆,你可以做這樣的:
首先,創建一個新的空庫
$ mkdir repoclone $ cd repoclone/ $ git init Initialized empty Git repository in /home/user/repoclone/.git/
添加您的倉庫在'origin'這個名字下(就像「git clone」會命名它),使用「git remote」命令請求只跟蹤兩個分支:'master'和'dev_swamy'。檢查它是否正確添加。
$ git remote add -t master -t dev_swamy origin [email protected]:repo.git $ git remote origin $ git remote show origin * remote origin Fetch URL: [email protected]:repo.git Push URL: [email protected]:repo.git HEAD branch: master Remote branches: master new (next fetch will store in remotes/origin) dev_swamy new (next fetch will store in remotes/origin)
如果穩定分支被稱爲'穩定'而不是'主',你當然會修改上面的例子。如果您希望指定的分支是遠程默認分支,則還有
-m <branch>
選項。從「出身」取(你可以做到這一點還可以通過使用
-f
選項「git的遠程添加」以上):$ git fetch remote: Counting objects: 282, done. remote: Compressing objects: 100% (193/193), done. remote: Total 282 (delta 82), reused 0 (delta 0) Receiving objects: 100% (282/282), 81.30 KiB | 135 KiB/s, done. Resolving deltas: 100% (82/82), done. From [email protected]:repo.git * [new branch] master -> origin/master * [new branch] dev_swamy -> origin/dev_swamy From [email protected]:repo.git * [new tag] v1.0 -> v1.0 * [new tag] v1.0.1 -> v1.0.1 * [new tag] v1.1 -> v1.1
設置本地分支「大師」(你會做你的工作)遵循「原點/主」(有「原點/主」上游),就像「混帳克隆」會做:
$ git checkout -t origin/master Branch master set up to track remote branch master from origin. Already on 'master'
可以重複此分支「dev_swamy」。
現在您可以看到配置文件的外觀。 通過編輯
.git/config
文件,您可以得到完全相同的結果,如下所示,然後執行「git fetch」。$ cat .git/config # or just open this file in your editor [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = [email protected]:repo.git fetch = +refs/heads/master:refs/remotes/origin/master fetch = +refs/heads/dev_swamy:refs/remotes/origin/dev_swamy [branch "master"] remote = origin merge = refs/heads/master
不要忘了介紹自己開始對倉庫工作前到Git(即集「user.name」和「user.email」配置變量,通常在每個用戶的配置文件)!
如果您克隆,則所有分支中的所有修訂都會被克隆,但克隆的存儲庫默認會檢出master。
只是採取選定的分支是棘手的,因爲git並不真的認爲你應該這樣工作。您必須手動拉下分支:
mkdir repoclone
cd repoclone
git init
git remote add origin git://remote/url
git fetch origin master:master
git fetch origin dev_XXX:dev_XXX
以上是我所瞭解的工作。但是,如果你想建立一個像平常一樣工作的git倉庫,只是對它的遠程分支有更窄的視圖?你可以做到這一點很容易地:
mkdir repoclone cd repoclone git init git remote add origin git://remote/url # now open .git/config for editing in your editor # replace the following line (grab all remote branches) fetch = +refs/heads/*:refs/remotes/origin/* # replace with lines listing exactly which branches you want fetch = +refs/heads/master:refs/remotes/origin/master fetch = +refs/heads/dev_XXX:refs/remotes/origin/dev_XXX # save the file, now run git fetch
我覺得這裏更重要的問題是什麼人將力推,而不是你會被克隆或拉。由於每個開發人員都在自己的分支上工作,另一個問題是如何最終得到一個通用的代碼庫。開發者是否將他們的分支合併爲主?然後他們是否將他們改變的主分支推送到中央存儲庫?如果是這樣的話,無論如何你都無法拉動其他開發商的分支機構。
如果情況並非如此,我不會看到你如何才能組成一個有效的團隊。
正如我最後的想法:我很想知道爲什麼你不想克隆其他開發者的分支到你的倉庫?
另一種方法是避免直接克隆,而是手動添加一個具有自定義提取refspecs的遠程設備。
例如
mkdir myclone
cd myclone
git init
git remote add origin url://origin.repo
# Add fetch rules for the branches that we want to track
git config remote.origin.fetch +refs/heads/master:+refs/remotes/origin/master
git config --add remote.origin.fetch +refs/heads/dev_swamy:+refs/remotes/origin/dev_swamy
# fetch now fetches just what we need, subsequently it will do incremental fetches
git fetch
# Creating local branches tracking the remote branches
git checkout -b master origin/master
git branch dev_swamy origin/dev/swamy
- 1. Git拉/克隆分支
- 2. 關於Git克隆和分支
- 3. 將git克隆到分支中
- 4. 在pycharm中克隆git分支
- 5. 克隆回購,其分支機構和git結帳
- 6. 本地克隆未知的Git分支
- 7. 試圖克隆使用Git分支,但
- 8. Git自動跟蹤分支克隆
- 9. 如何用git-p4克隆分支?
- 10. Intellij git:克隆特定分支
- 11. Git和克隆
- 12. git克隆分叉git分支的特定版本
- 13. 維護包含其他克隆git回購的git回購
- 14. git + sourcetree:新克隆的git repo不允許切換分支
- 15. 如何使用Gitpython從Git中的特定分支克隆
- 16. 如何標記並克隆到git分支中的標記?
- 17. 克隆時過濾掉Git中的分支
- 18. Actionscript3克隆和拖動對象其他
- 19. 刪除淺克隆中的分支
- 20. 如何從git-tfs中排除某些分支克隆操作
- 21. git抓取和克隆
- 22. gitosis和git克隆問題
- 23. * git svn克隆*
- 24. 無法簽出其他分支的Git
- 25. 如何克隆其默認分支上的子模塊簽出git存儲庫?
- 26. 腳本中的Git克隆
- 27. 無法克隆沒有master分支的git倉庫開始
- 28. 是否可以使用git查看網站克隆的分支?
- 29. 如何克隆只有非主分支的git倉庫?
- 30. 如何克隆所有分支的git存儲庫?
啊哈!這是我一直在考慮的問題 - 是否有辦法克隆只有一個分支。一個有趣的想法是打開它的頭並只抓取你需要的東西。但是第一次獲取會產生這樣的錯誤:「致命的:拒絕進入非裸倉庫的當前分支裁判/頭/主」 – 2009-10-23 20:50:13
順便說一句,你可以使用'git init repoclone' – 2009-10-23 22:07:43
@Steve:啊,你是對的。您可以用「'git fetch origin master; git reset --hard FETCH_HEAD'」替換爲設置主文件。 – u0b34a0f6ae 2009-10-23 22:50:11