2016-08-29 136 views
0

我有大約160K承諾每3個文件被更新(在使用github上的網站),我正在尋找一種方式來獲得這些文件,所以我可以然後把內容製作成真正的DB。獲得每個git的文件提交

我的問題是如何才能得到(下載?)更新的文件,從每次提交,將它們保存到一個文件夾的時間戳/ commitSHA附加到名稱,以避免命名衝突。

這是可能的混帳?我知道我可以使用github網站查看文件以及發生了什麼變化,但問題是有超過160k的提交。

+0

我的理解是,你正試圖獲得該文件的每個160k版本,是不是? –

+0

正確。一旦我有文件,我知道如何處理它們,得到它們就是問題所在。 – Tribe

回答

1

這還不是最完美的解決方案,但它應該工作。

首先,你必須讓使用庫的本地副本:

git clone <repo-url> 

您從項目的GitHub的頁面得到<repo-url>(檢查「克隆或下載」按鈕)。

然後你cd到本地回購和運行這些方針的東西:

for rev in $(git log --format=%H); do 
    git checkout $rev -- file1 
    cp file1 ../history/file1-$rev 
done 

請務必提前創建history目錄。爲每個需要獲取的文件複製循環內部的兩行。在結束

運行git reset --hard讓處於原始狀態的存儲庫。

如果你還需要文件的時間戳,你可以使用git log --format=%ct file1。對於其他文件

ts=$(git log --format=%ct $rev file1) 
cp file1 ../history/file1-$rev-$ts 

檢查documentation或承諾,你可以開始使用get log性能:與更換cp命令。

+0

感謝你們所有的三個人(la,,Fabrizio Migotto,還有你們)。做這個只是因爲它有所有步驟纔是正確的。 現在我開始等待,而我下載500Kish txt文件! – Tribe

1

一旦你有你的資料庫*的本地工作副本,你可以從任何git的文件通過查看該承諾,在承諾只是:

git checkout 1e6c98511d9154bfdc49a31fd26229953df0bd70 

因此,要獲得從每一個文件在您的項目歷史中提交,您只需要(a)爲您的項目生成提交列表,然後(b)遍歷該列表,檢查每個提交併處理文件。

git rev-list HEAD命令將產生對當前分支(從最新到最舊的)所有提交的清單。如果您想以正向順序處理這些文件,可以將其傳送至tac以反轉列表,例如

for rev in $(git rev-list HEAD | tac); do 
    git checkout $rev 
    ...do something here... 
done 

*運行git clone <repourl>

1

假設你是新使用git,你將不得不從這裏安裝git的工具:

https://git-scm.com/

然後,你將不得不克隆你的倉庫在git控制檯中運行:

git clone https://github.com/username/repositoryname.git

這些步驟後,你將能夠在不同的提交移動作爲@larsks解釋。

上市每提交一個特定的文件:

List all commits for a specific file

相關問題