天天看點

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

作者:lnsstyp
讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

我們日常開發工作中避免不了要使用代碼管理工具,其中git是我們熟知的一種,操作它可以使用git bash指令行也可以使用TortoiseGit(小烏龜)等。

這些都是基于我們在本地進行代碼管理,然後跟遠端同步,那假設我們的代碼就在遠端呢?不在本地電腦,或者我們要管理的内容是通過浏覽器傳過來的,不是我們使用本地編輯器建立的,這時候能處理嗎?

概述

要知道git可以管理任何内容,不僅僅是代碼。

比如我們的資料庫内容修改了之後如何檢視修改記錄呢?再比如使用者傳過來的文本或者檔案想要存儲起來,并且可以修改,那如何檢視之前的版本呢?

我們想要把某個接口得到的資料進行版本管理,該如何做到呢?

方法肯定有很多種,今天我們來看看使用isomorphic-git能做些什麼吧。

我們來分為三個部分進行講述,每一部分都對應了不同的可操作内容。

要實作上述所說需求,涉及到了後端的内容,所有功能全部由頁面中調用接口實作。

而且通過這種方式,要管理的代碼所在的電腦或者伺服器上面不需要安裝git等,直接本身就可以實作這些功能。

一、本地git檔案管理

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

此處的本地不是指本機電腦磁盤,而是指存放git檔案的地方,将放在遠端伺服器等處。這裡是相對于github、gitee等而言的。

  1. 初始化git項目檔案

通過git.init方法來初始化一個git目錄,用來作為你的工作目錄進行版本控制。可以指定預設分支,預設為master:

const dir = join(process.cwd(), config.gitFolder)
await git.init({
  fs,
  dir,
  defaultBranch: bd.localBranch
})           

這裡的gitFolder是我設定的預設路徑,指定了存放在目前項目下的public/pageRecord檔案夾中。

點選該按鈕,我們看下效果:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

已經生成了.git檔案夾。

  1. 同步資料庫到本地檔案

這個是我自己寫的将資料庫中的資料同步到public/pageRecord檔案夾中,并根據不同的資料記錄生成不同的檔案夾以及檔案,看下效果。

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

已經将資料庫的檔案同步到指定檔案夾下面了。

  1. 将修改檔案添加到待送出區

通過git.add将剛生成的檔案添加到暫存區,這就相當于我們的git add。看下效果:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

這個時候檔案就已經添加到git的暫存區了。

  1. 将待送出區檔案進行送出

通過git.commit來送出剛才的檔案,這個就相當于git commit,我們送出一次看看:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

由于我們是第一次送出,并且沒有設定賬戶資訊,是以需要我們填寫一下,再看下工作目錄:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

這個時候已經将暫存區的檔案送出到了分支上面。

好了,伺服器上面的git工作目錄已經完事了,以github為例,我們繼續看下遠端git的管理。

二、遠端檔案管理

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

  1. 配置遠端git倉庫位址

這裡我在自己的倉庫上建立一個測試倉庫,看看它們是怎麼運作的。

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

這樣我們在github上就建立了一個test-project的倉庫。

回到我們的頁面,點選該按鈕:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

通過git.addRemote就可以添加該位址,現在我們已經設定好了遠端倉庫的位址。

  1. 拉取遠端檔案到本地

這裡由于我們建立了一個空倉庫,并且本地已經生成了git工作目錄,是以我們隻看第3個功能。

如果github上面已經有一個現成的項目倉庫,而本地是空的工作目錄,那麼可以利用這個功能(git.pull)将github上面的倉庫拉取到本地。

  1. 推送本地檔案到遠端

使用git.push來完成此操作,相當于git push

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

當我們推送的時候需要輸入驗證資訊,點選确認按鈕,看看發生了什麼:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

已經将本地的檔案上傳到了github上面。

  1. 設定其他git配置項

主要是用git.setConfig來設定一些額外的配置項,友善我們後續的操作:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

比如我們這裡設定賬戶名稱和郵箱,那麼它就會同步在配置檔案裡面:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

這裡隻是舉個例子,實際中我們應該使用真實的資訊。

三、git日志與配置

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

  1. 送出日志

通過git.log來完成此操作,點選該按鈕:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

可以輸入一些查詢的資訊選項,也可以直接點選确認,來預設查詢:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

能夠看到,我們剛才的送出記錄被展示出來了,點選檢視圖示,可以檢視本次的送出内容:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

頂部是我們的送出說明,下面是添加的所有檔案資訊。

點選對應的檔案,可以檢視詳細内容:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

展示出了該檔案從無到有的添加過程與内容。

我們現在試着來修改其中一個檔案,并添加到暫存區,然後送出到分支,但是不進行推送。

利用上面我們做出的功能來操作一下,看看這回的日志:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

已經出現啦!

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

相應的内容變成了修改。

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

也能看到修改的詳細資訊。

  1. 檔案日志

主要通過git.walk和git.tree來配合完成該功能。

點選該按鈕,我們能看到目前git工作目錄下的全部檔案:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

點進對應的目錄,一直找到我們剛才修改的檔案:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

檢視日志可以看到該檔案被修改的日志記錄:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

一共被修改了兩次,在這裡同樣可以通過檢視圖示繼續檢視詳細資訊。

  1. 檔案狀态

這裡是通過git.statusMatrix來實作檔案狀态的檢視。

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

可以看到,我們剛才送出之後再未做過任何修改。

現在讓我們來修改一下,看看它們的幾種狀态:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

可以看到,有修改的、删除的、新增的。這裡全部都列了出來。

  1. 基本配置

這裡可以檢視我們給git設定的配置項,簡單來查詢一下:

讓系統支援git管理:使用isomorphic-git讓資料庫具備版本控制

示意圖

這樣就可以看到我們剛才設定的配置資訊。

最後

我們通過isomorphic-git實作了從資料庫到伺服器到github的資料版本控制。并具備了初始化、添加、送出、同步、推送、拉取、資訊配置、送出日志檢視、檔案日志檢視、檔案狀态檢視、配置資訊檢視等功能。

其實isomorphic-git還具有很多其他的能力,可以自己嘗試實作一下,這裡就不示範了。

總結

使用isomorphic-git能夠滿足我們開發工作的一部分場景,解決我們需要對一些持久化資料做版本控制的需求,但是需要後端的支援,比如這裡我自己寫了後端的接口,通過在前端頁面中進行友好的互動,來控制想要做的操作。同樣它也提供了純前端的引入,可以通過CDN等方式來實作,然後通過在浏覽器的本地存儲中實作各種操作。

需要體驗可以通路:

// 項目內建isomorphic-git,操作工作目錄,作版本控制
// http://lnsstyp.com/manage           

有興趣的小夥伴可以嘗試一下,也可以自己做一做,希望能夠幫助到你。

繼續閱讀