2012-03-07 205 views
38

我想從github遠程倉庫導出,而不是克隆它。與svn export類似,我不想使用它獲取.git文件夾。我可以通過克隆和刪除.git文件夾來解決它。我想知道是否有更清潔的方式?從github遠程倉庫git導出

我讀過的地方你可以使用git歸檔來實現這一點。

但是我得到了下面的錯誤..

$ git archive --format=tar [email protected]:xxx/yyy.git master | tar -xf - 

Invalid command: 'git-upload-archive 'xxx/yyy.git'' 
You appear to be using ssh to clone a git:// URL. 
Make sure your core.gitProxy config option and the 
GIT_PROXY_COMMAND environment variable are NOT set. 
fatal: The remote end hung up unexpectedly 

任何幫助將是巨大的。謝謝。

回答

6

如果您的目標是限制與服務器交換的信息數量,您是否考慮過使用clone--depth?你仍然需要儘管刪除(大大減少).git子目錄:

git clone --depth=1 [email protected]:xxx/yyy.git && rm -rf yyy/.git 
+0

好主意。它會更好,如果我可以'出口':) – 2012-03-07 22:33:48

+0

如果你在zsh你可以這樣做:https://gist.github.com/johnhamelink/5434938 – 2013-04-22 13:41:29

-4

對於正常出口:

$ git archive master | tar -x -C /path/to/destination 

對於拉鍊檔案:

$ git archive --format zip --output /path/to/destination/file.zip master 

當然,爲了這個工作,你需要首先在本地克隆它,沒有乾淨方式。

+0

@AdrianGunawan你將無法導出它直接來自GitHub,你需要首先在本地克隆它。在本地克隆後,'master'指分支名稱。 – 2012-03-07 22:34:41

+2

Downvoted無視所述問題的癥結所在。 – danorton 2012-08-22 21:56:51

7

如果您只想從GitHub導出,那麼它們提供了一種下載tar包的機制。例如:

https://github.com/torvalds/linux/downloads

即使它說:「有沒有對這個倉庫的任何下載。」你仍然可以使用按鈕來下載主分支的tarball。

或者看到這個鏈接,鏈接到標籤tar包的列表:

https://github.com/torvalds/linux/tags

這應該對任何GitHub庫工作,不只是Linux內核。

+1

如果它適用於任何git存儲庫,而不僅僅是github,那將會很有用。 – 2012-05-21 15:09:58

3

如果你需要這個名爲提交(即分支和標籤),那麼你可以使用git clone --depth=1git archive

這是值得了解git clone --depth=1克隆所有頂級提交的所有分支和標籤組合(不只有master)。所以在做這樣一個淺層克隆後,你可以進入本地目錄並製作一個git archive --format=tar tag_to_be_exported

所以,如果你要導出的標籤release1.1

git clone --depth=1 [email protected]:xxx/yyy.git 
cd yyy 
git archive --format=tar release1.1 -o release1.1.tar 

所以unnless需要導出無名提交的IDS,這可能是一個很好的解決方案。

+1

有趣的是,您提到了「所有分支和標籤」主題。確實,人們可能想要在一個龐大的倉庫中導出一個輕量級的分支。然而在我的git(1.9.1)中,'man git-clone'有選項' - [no-] single-branch'「只克隆通向單個分支頂端的歷史記錄」和「 --depth選項,這是默認設置,除非--no-single-branch被用於獲取所有分支提示附近的歷史記錄。「 – 2014-10-01 15:19:38

+0

@StéphaneGourichon是的,默認發生了改變,因爲這個答案已發佈:http://stackoverflow.com/a/9920956/239408 – xverges 2017-01-31 21:45:16

50

多虧了GitHub上的Subversion的支持,您可以使用svn export拿到項目沒有任何版本控制文件:

svn export https://github.com/user/project/trunk 

注意網址格式:

  • 的基本網址爲https://github.com/
  • USERNAME/PROJECTNAME沒有.git
  • /trunk

這樣,您就可以得到分支機構和子目錄也追加。

這將創建一個包含導出文件的目錄。無法直接創建tar/zip,您必須分兩步執行(導出+ zip)。這是svn export本身的限制。

由於@Jon指出,這將默認在名爲trunk的目錄中創建導出。如果您願意,可以指定不同的名稱:

svn export https://github.com/username/projectname/trunk projectname 

您可以使用此技術導出項目的任何子目錄。 例如,如果你只想要some/path,你可以這樣做:

svn export https://github.com/username/projectname/trunk/some/path local-dir-name 

你可以從分支和標籤的路徑了。端點https://github.com/username/projectname充分表現爲具有常規佈局的Subversion存儲庫,因此您會在https://github.com/username/projectname/branches中找到分支,並在https://github.com/username/projectname/tags中找到標籤。

在您錯誤地導出大的內容之前,先檢查路徑的內容是很好的。你可以做,使用svn ls,例如:

svn ls https://github.com/username/projectname/ 

通常這應該給你:

branches/ 
tags/ 
trunk/ 

你可以反覆探索庫這種方式。

+0

這工作像一個魅力 – 2013-10-30 16:31:28

+3

偉大的解決方案。有一點需要注意的是,這將默認創建一個名爲'trunk'的根目錄。爲了避免這種情況,只需指定一個替代名稱,如下所示:'svn export https:// github。com/username/projectname/trunk projectname' – Jon 2013-12-02 19:49:02

+1

謝謝@Jon,我將你的記錄添加到我的答案! – janos 2013-12-02 20:12:33

1

我遇到過同樣的問題,而AFAICT,它似乎只適用於Bitbucket,例如,

ysim:~/repos$ git archive --format=tar --prefix=alembic/ --remote=ssh://[email protected]/zzzeek/alembic.git master | tar -xf - 
ysim:~/repos$ ls 
alembic 

但是我發現了一個解決方法GitHub的使用wget - 所以在新的GitHub的界面,你會發現一個按鈕,上面寫着「下載ZIP」右側邊欄上的底部;右鍵單擊它並複製鏈接地址。

Download ZIP

接下來,在命令行(我從here的想法):

wget -qO- -O tmp.zip <zipball url> && unzip tmp.zip && rm tmp.zip 

這將其解壓縮到一個名爲像repo-master/目錄。

如果你願意,你也可以在你的.gitconfig中別名,所以你不必記住/輸入所有這些,例如,

export = "! f() { wget -qO- -O tmp.zip \"$1\" && unzip tmp.zip && rm tmp.zip; }; f" 

所以你可以做這樣的事情在shell:

ysim:~/repos$ git export https://github.com/ysim/verbinski/archive/master.zip 
ysim:~/repos$ ls 
verbinski-master 
0

的一種方式實現這一目標是使用由GIT SVN提供支持。

以超級用戶身份執行的步驟是(對於Cent OS);

yum install git 

yum install subversion 

然後進行選擇性的出口以下語法應使用:

svn export <git repository>/<source folder> <empty target folder> --no-auth-cache --force --username <active directory username> 

如果不使用參數--no-auth的緩存時提示保存密碼,輸入「no」出於安全原因,否則它將被保存爲未加密。

當從GIT表示法轉換爲SVN表示法時,應用以下映射; 用主幹「主幹」代替「樹/主」 將分支替換爲「分支/分支名稱」的「樹/分支名稱」

這適用於文件和目錄。

3

對於未知的(對我而言至少)原因GitHub doesn't support this

We don’t support people running git-archive against our servers. 

看來愚蠢的,因爲通過SVN就可以了,但是...我upvoted @Janos' answer