git subtree:無縫管理通用子項目

来源:http://www.cnblogs.com/jiaoyu121/archive/2017/06/17/7041726.html
-Advertisement-
Play Games

移動互聯網的爆發以及響應式頁面的尷尬症,開發web和mobile項目成為了標配,當然實際情況下,會有更多的項目。 多項目開發對於前端來說是個很大的挑戰✦ 重覆,重覆的前端架構,重覆的前端依賴,重覆的工具函數等✦ 局限,不同後臺有不同的規則,“因地制宜”真難受,剛伺候好rails又突然來個php✦ 最 ...


移動互聯網的爆發以及響應式頁面的尷尬症,開發web和mobile項目成為了標配,當然實際情況下,會有更多的項目。

多項目開發對於前端來說是個很大的挑戰
✦ 重覆,重覆的前端架構,重覆的前端依賴,重覆的工具函數等
✦ 局限,不同後臺有不同的規則,“因地制宜”真難受,剛伺候好rails又突然來個php
✦ 最優,後臺工程做前端構建,總是顯得不夠“最優”。

所以,我們需要單獨抽離出前端開發項目,按照前端的方式來組織代碼,通過構建工具來對前端資源文件做最優處理
那麼新問題來了,如何管理這個快速迭代,頻繁更新的前端項目呢?
✦ 作為單獨的項目管理?
✦ 用git submodule or git subtree管理?

多個後臺項目:qdaily4_web/moible/app
前端項目:qdaily4_feboierplate

之前的開發模式

✦ 在qdaily4_feboierplate項目中修改前端代碼
✦ 構建qdaily4_feboierplate項目,輸出到qdaily4_web/mobile/app
✦ 提交qdaily4_feboierplate項目的改動
✦ 在qdaily4_web/mobile/app項目中修改後臺代碼
✦ 提交qdaily4_web/mobile/app項目的改動,其中包括qdaily4_feboierplate項目構建輸出的文件

這種開發模式解耦了前端項目和後臺項目,前端項目嚴格按照前端的代碼結構去組織代碼,能夠實現模塊化,按需載入,就近原則,圖片壓縮等功能。缺陷在於需要頻繁的切換項目提交代碼。

為瞭解決頻繁切換項目的問題,調研了git submodule和git subtree之後,選擇用git subtree來解決這個問題。

現在的開發模式

qdaily4_feboierplate作為qdaily4_web/mobile/app的子項目,別名appfe
✦ 在appfe項目中修改前端代碼
✦ 構建appfe項目,輸出到qdaily4_web/mobile/app
✦ 提交qdaily4_web/mobile/app項目的改動(也會記錄appfe項目的改動)
✦ 使用git subtree命令提交appfe的改動到qdaily4_feboierplate

引入git subtree之後,不再感覺是在開發兩個項目,不需要頻繁的切換項目提交代碼,只需要使用git subtree命令就可以實現qdaily4_feboierplate項目的雙向更新,快速開發。缺陷在於存在多個qdaily4_feboierplate項目的拷貝。

雙向更新

前端項目qdaily4_feboierplate是作為子git被包含到多個後臺項目中,我們通過git subtree pull & git subtree push實現qdaily4_feboierplate的雙向更新,對於不穩定且需要快速迭代的模塊代碼恰到好處。

利用git subtree來管理前端模塊項目和多個後臺環境項目,可以有效快捷的實現前端模塊項目快速開發,雙向更新,配合上前端構建系統,簡直爽翻了。

小技巧

git倉庫取別名

使用appfe作為[email protected]:qdaily/qdaily4_feboierplate倉庫的別名
✦ 直接命令行輸入:

git remote add appfe git@bitbucket.org:qdaily/qdaily4_feboierplate.git

✦ 也可以通過配置.git/config文件:

[remote "appfe"]
    url = git@bitbucket.org:qdaily/qdaily4_feboierplate
    fetch = +refs/heads/*:refs/remotes/appfe/*

git指令自定義

git subtree pull 和 git subtree push 是需要頻繁使用的命令,我們可以通過自定義來讓git指令更簡單更好記

✦ 直接命令行輸入

git subtree pull --prefix=appfe appfe master
git subtree push --prefix=appfe appfe master

✦ 也可以配置.git/config讓git subtree的命令更簡單
!:表示外部命令而不是git命令,相當於直接在shell中運行!後的組合命令。
$1:表示shell傳進來的第一個參數,比如git stpull demo/xxx,那麼$1就是demo/xxx
::組合命令尾部的:很神奇,沒有它,最後一個指令不會運行,所以它起到一個占位的作用。
第二版Tip:
✦ 可以看出,如果當前分支沒有stash的東西,這個組合命令會出現問題,還未想到解決方案,有瞭解的人可以留言指出。

// 第二版
// git stpull demo/xxx
// git stpush demo/xxx
[alias]
    stpull = !git stash \
        && git subtree pull --prefix=appfe appfe $1 \
        && git stash pop \
        && :
    stpush = !git stash \
        && git subtree push --prefix=appfe appfe $1 \
        && git stash pop \
        && :

第三版Tip:
✦ 放棄了stash,讓用戶自己去處理stash相關的事情。
✦ 使用兩個參數,表示子項目目錄和分值名稱,這樣可以相容處理多個子項目,不同分支的情況。
✦ 使用git subtree split --rejoin,解決了每次提交都需要重頭遍歷commits耗時過長的問題。
✦ 每次git subtree push之前都先git subtree pull,是為瞭解決錯誤時機git subtree split導致push失敗。
✦ 初次運行時,遠端沒有demo/xxx分支,需要使用git subtree push -P appfe demo/xxx新建遠端分支。

// 第三版
// git stpull appfe demo/xxx
// git stpush appfe demo/xxx
[alias]
    stpull = !git subtree pull --prefix=$1 appfe $2 \
        && :
    stpush = !git subtree pull --prefix=$1 appfe $2 \
        && git subtree split --rejoin --prefix=$1 $2 \
        && git subtree push --prefix=$1 appfe $2 \
        && :

自定義git指令對於一些常使用的長命令很有效,強烈建議使用!


學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入學習交流群
343599877,我們一起學前端!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • spring boot日誌預設採用logback進行輸出,你可以對logback進行定製化,方法如下: 在resources文件夾下建立logback.xml配置文件 具體配置,可以定位到spring-boot.jar裡面去看看 日誌文件路徑配置在application.properties裡面配置 ...
  • 1. 官網下載 wget http://mirror.bit.edu.cn/apache/hadoop/common /hadoop-3.0.0-alpha3/hadoop-3.0.0-alpha3.tar.gz ..註意下載二進位(省時間) 1解壓 tar -zxvf hadoop-3.0.0-a ...
  • 1. HADOOP背景介紹 1.1 什麼是HADOOP 1. HADOOP是apache旗下的一套開源軟體平臺 2. HADOOP提供的功能:利用伺服器集群,根據用戶的自定義業務邏輯,對海量數據進行分散式處理 3. HADOOP的核心組件有 A. HDFS(分散式文件系統) B. YARN(運算資源 ...
  • [1]框架與庫 [2]解決方案 [3]DOM [4]通信 [5]工具包 [6]模板 [7]組件 [8]路由 [9]架構 ...
  • 今天寫頁面頁面需求到柱狀圖標,今天介紹一下我所用的Chart.js圖表插件 官網:http://www.bootcss.com/p/chart.js/ 裡面會有下載js文件和中文文檔 一、接下來簡單說一下用法 效果 其中分類為6種,他們都是new Chart(獲取的畫布).Line(數據): 1、 ...
  • ASP.NET環境下XMLHttpRequest中responseText()方法返回值為空問題討論 一、問題產生環境:用JavaScript的XMLHttpRequest發送GET請求,請求的數據來自asp.net介面,數據格式為string或json。 代碼如下: 二、分析: 1.如果將asp. ...
  • 1.三元操作符 這是一個很好的節省代碼當你想要編寫一個如果. . else語句在一線。 普通寫法: const x = 20;let big;if (x > 10) { 速記: 你還可以嵌套的if語句如下: 2. 短路評價速記 分配一個變數值到另一個變數的時候,你可能想要確保源變數不是null,未定 ...
  • 前端工程化可以自動化處理一些繁複的工作,提高開發效率,減少低級錯誤。 更重要的是,還是文章開頭的說的,前端工程化最大的意義在於給我們新的視角去看待前端開發,讓前端開發可以做更複雜、更有挑戰的事情! ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...