2016-08-04 125 views
5

我搜索了很多,但不清楚git是否是我想要做或不想做的正確工具。 當我編寫代碼時,我想創建整個存儲庫的快照以便在各個地方測試東西。我忘記了添加/編輯代碼的位置,所以一件好事就是將整個存儲庫「恢復」到初始狀態。這些快照需要能夠被永久保留或刪除,因爲這些只是測試和實驗。創建倉庫的快照(git?)

虛擬機快照速度較慢並且中斷連接。我正在考慮Git及其分支功能。但據我所見,git可以永久保存所有東西,除非給出一些特殊的危險命令來刪除東西。

我想要的: 提交多個快照,能夠在它們之間切換並在將所有內容全部推送到聯機存儲庫時將其永久刪除。我不想浪費回購空間,因爲無用的代碼,無用的提交使視圖混亂。

這可能是一個小菜鳥問題,不幸的是,互聯網上的每一個指南都告訴我們很多命令和概念,很少有真正的用例。

非常感謝大家

回答

2

當我編寫代碼時,我想創建整個存儲庫的快照以便在各個地方測試東西。

是的,git是非常好的。

而這些快照需要能夠永久保留或刪除,因爲這些只是測試和實驗。

分行將爲您做到這一點。

據我所看到的git使一切永遠,

不,那不是真的。它只保留所有具有分支或標籤的提交以及直接引導它們的所有提交。其他提交,你不能通過任何分支或標籤到達將(一段時間後)通過垃圾回收自動刪除。

我想要的是:提交多個快照,能夠在它們之間切換並在將所有內容推送到聯機存儲庫時永久刪除它們。

是的,git分支。

我不想浪費回購空間,因爲無用的代碼,無用的提交混亂的視圖。

是的,它們會消失;除非我們在這裏討論Linux大小的項目,否則空間應該不是問題。

這可能是一個小菜單問題,不幸的是,互聯網上的每一個指南都告訴我們很多命令和概念,很少有真正的用例。

http://gitready.com/beginner/2009/02/17/how-git-stores-your-data.html是一個很好的介紹; https://www.jayway.com/2013/03/03/git-is-a-purely-functional-data-structure/有很多細節(在第一個鏈接之後閱讀,可能對你來說只是過分)。

+0

你太棒了。是的,我對分支有很多想法,我只是不想像SVN那樣混亂。所以提交會被刪除,如果沒有標籤關聯,對嗎?我閱讀垃圾收集,但無法弄清楚它是如何工作的。 – Mc128k

+1

它在幕後工作。我知道你的意思,如果你習慣了SVN,那麼對分支的一些理解是可以理解的;它們在'git'中完全不同(乾淨,簡單,輕量級)。 – AnoE

1

Git聽起來像是您的使用案例的絕佳選擇。與許多其他版本控制系統(VCS)不同,Git是基於存儲庫或基於項目的VCS。當您在Git中執行提交時,您基本上會拍攝整個項目的快照,包括每個文件。這與其他VCS如Perforce相反,其中每個文件都有自己的歷史。因此,從Git的一個狀態到另一個狀態很容易。

Git的另一個好處是它只存儲從一次提交到下一次提交(至少在概念上,實際上它保留了一個樹結構)的diff。因此,如果只將項目中的一個文件從一個提交更改爲下一個,那麼Git將只會將變更記錄到您的項目中。這使得Git變得精益而且意味着,並且不需要刪除任何你可能認爲是超級的東西; Git存儲完成工作所需的最少量信息。從概念上講,您可以將Git視爲在存儲庫上完成整個項目的一個完整快照,之後僅記錄更改,因爲它們應該發生。

+0

您對'diff'的描述會讓人誤解 - 這不是'git'在內部的工作方式。 – AnoE

+0

@AnoE你的評論是誤導性的,因爲你聽起來Git確實不會在每次提交中存儲修改文件的差異,而這正是它的功能。 –

+0

http://stackoverflow.com/questions/10398744/does-git-store-diff-information-in-commit-objects – AnoE