模塊化與GIT版本管理

Dec.11-->study notepad
 
#~~~~~~~~~~~~~~~~~~~~~~~~
part1:
按需加載
運行時,根據用戶需求(提供字符串),找到模塊的資源動態的加載起來
 
內建函數__import__(name,globals=None,locals=None,fromlist=(),level=0)
name模塊名,
import語句本質上就是調用這個函數,不鼓勵直接使用,建議importlib.import_module()
例如sys = __import__('sys') 等價於import sys
 
importlib.import_module()
importlib.import_module(name,package=None)
支持絕對導入和相對導入,package必須設置
 
import importlib
def plugin_load(plugin_name:str,sep=':'):
    m,_,c = plugin_name.partition(sep)
    mod = importlib.import_module(m)
    cls = getattr(mod,c)
    return cls()    #返回實例
 
if __name__ == '__main__':
    #裝載插件
    a = plugin_load('test:A')
    a.showme()  #拿到test模塊的方法
上述就是插件化編程的核心代碼
 
插件化變成技術:
反射:運行時獲取類型的信息,能夠動態維護類型數據
動態import:推薦使用importlib模塊,實現動態import的能力
多線程:能夠開啓一個線程,等待用戶輸入
 
加載的時機:
[1]程序啓動時,啓動程序時,掃描固定的目錄,加載插件
[2]程序運行過程當中,接受用戶的指令或者請求,啓動相應的插件
二者各有利弊,能夠互相綜合
 
應用:
實現基本功能的開發後,對其進行功能的加強,後期調用其餘插件,方便擴展
 
插件化開發:
考慮軟件功能,後期插件化增長
API(:暴露出來的功能,函數or方法)[外界能方便調用,或者說是暴露給外界使用]
 
插件化:程序的功能輕量化,實現定製化需求
 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
part2:
當實例過多時,使用__slots__來節省內存,__slots__針對實例,隻影響當前類的實例,對類屬性無效
__slots__不影響繼承,應用場景,數百萬以上對象,內存緊張時
不受繼承,子類即失效
 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NotImplemented:未實現範
NotImplementedError:未實現異常
操做數的運算符重載的反向方法,類型須要考慮
Notlmplemented:單值,是NotlmpementedType類的實例
NotlmplementedError,是個異常 類型,返回type(類型)
 
運算符有重載的反向方法
若兩個對象都有__add__方法,則執行正常,若是一個沒有則,會去向另外一個查找對應的__add__方法,可是隻有一方知足了__add__方法,須要判斷另外一方是不是能夠執行__add__方法的對象
class A:
     def __init__(self,x)
          self.x = x
     def __add__(self,other)
          try:
               x = other.x
               return self.x +other.x
          except AttributeError:
          try:
               x = int(other)     #對其進行類型轉換
          except :
               x = 0                 #若類型轉換也失敗,則直接強轉對象爲0,並進行其對應的執行方法
          return self.x + x
     def  __radd__(self,other):
          return self + other
解決a + 1  的類型錯誤
'abc' + a,字符串也實現了__add__方法,不過默認是處理不了和其餘類型的加法,就返回Notlmplemented
 
當類型錯誤時,能夠考慮取默認值 =0
方法相似功能,能夠考慮返回另外一個實現方法,避免代碼重複
 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
part3:
版本管理(GIT,SVN):
GIT:基於web的管理中心
使用GIT的Gogs來搭建私服:
linux 安裝git 指令: yum install git
windows 安裝對應的版本便可
Repository倉庫,版本庫
git初始化後,會在當前目錄生成一個.git目錄,這就是版本庫
Workspace工做空間,工做區
.git所在的目錄就是工做區,通常式項目的根目錄
index索引
介於工做區和版本庫之間,暫存修改的
remote 遠程版本庫
網絡上的另外一個版本庫,能夠和本地庫交互
#~~~~~~~~~~~~~~~~~~~~~~~~
使用:
在當前目錄中增長了一個.git目錄中個文件目錄中的文件不要自行修改,這個目錄通常是項目的根目錄--> git init
添加文件:git add ????
單個文件添加,這一步是把文件的當前變化增長到緩存區中,也就是之後這個文件須要版本庫來跟蹤管理,這不是提交,可是文件還能夠繼續修改,還能夠添加新的被跟蹤文件,必需要add才能把這些改變加入到緩存區中
批量添加 git add.
. 點號 表明當前目錄,這條命令將傳遞添加當前目錄以及其子目錄全部文件,只要是目錄就會被遞歸的添加該目錄下的文件和子目錄
 
查看狀態 --> git status
git的文件分類
追蹤的Tracked,已經加入版本庫的文件
未追蹤的UNtracked,爲加入到版本庫的文件
忽略的Ignored,git不在關注的文件,例如一些臨時文件,忽略文件不須要本身寫,python的能夠參考 https://github.com/github/gitignore/blob/master/Python.gitignore
 
提交代碼
git commit -m "???"
commit提交更改到版本庫
-m 填寫本第二天志消息,必須寫,
一個文件commit過一次後,再次對此文件發起修改,修改完以後還須要再次add -->commit該文件到緩存區中
 
git的提交
暫存變動:add做用是把心文件或者文件新的改動添加到暫存區stage,也就是添加到index中
提交更改:commit提交的是暫存區中的改動,而不是物理文件目前的改動,提交到當前分支,默認是master分支
也可使用這條命令:git commit -a 將上兩步合爲一步 
-a ,-all會把全部跟蹤的文件的改動自動暫存,而後committ
 
增補
第二次提交後,若忘記加入一個文件???.htm
git add ???.htm
git commit --amend
--amend 修改
git log 查看版本庫中提交的歷史記錄
 
diff比較
查看各類差別
git diff 查看被跟蹤文件未暫存的修改,比較暫存區和工做區
git diff --cached 查看被跟蹤文件暫存的修改,比較暫存區和上一次commit的差別
git diff HEAD,查看被跟蹤文件,比較工做區和上一次commit的差別,HEAD指代最後一次commit
 
HEAD
HEAD,指代最後一次commit
HEAD^ ,指代上一次提交
HEAD ^^ 指代上上一次提交
上n次提交 表示爲HEAD~n
 
檢出和重置
 
命令
說明
git checkout
列出暫存區能夠被檢出的文件
git checkout file
從暫存區檢出文件到工做區,就是覆蓋工做區文件,能夠指定檢出的文件,但不是清楚stage
git checkout commit file
檢出某個commit的指定文件到暫存區和工做區
git checkout
檢出暫存區的全部文件到工做區
git checkout about ??? 從暫存區檢出到工做區,工做區有了暫存區文件的內容
git checkout HEAD ??? 使用當前分支的最後一次commit檢出覆蓋暫存區和工做區
 
命令
說明
git reset
列出將被reset的文件
git reset file
重置文件的暫存區,和上一次commit一致,不影響工做區
git reset  --hard
重置暫存區和工做區,與上一次commit保持一致
echo "hello" > about.htm
git add about.htm     添加到暫存區
git reset about.htm 使用最後一次提交到覆蓋到暫存區
cat about.htm 工做區文件有內容
git add about.htm 添加到暫存區
git reset --hard 重置暫存區與工做區爲上一次commit
cat about.htm 工做區無內容
 
命令
說明
git reflog
顯示commit的信息,只要HEAD發生變化,就能夠在這裏看到
git reset commit
重置當前分支的HEAD爲指定commit,同時重置暫存區,但工做區不變
git reset --hard [commit]
重置當前分支的HEAD爲指定commit,同時重置暫存區和工做區,與指定commit一致
git reset --keep [commit]
重置當前HEAD爲指定commit ,但保持暫存區和工做區不變
移動和刪除
git my src dest更名,直接把更名的改動放入暫存區
git rm file 會同時在版本庫和工做目錄中刪除文件,真刪除
git rm --cached file將文件從暫存轉成未暫存,從版本庫中刪除,但不刪除工做的該文件,即文件恢復成不追蹤的狀態
以上都只是改動,只有commit 後纔算是真的改動了
 
#~~~~~~~~~~~~~~~~~~~~~
push到服務器
更改本地用戶名和郵箱
git config --global user.name "name"
git config --global user.email "name@???.com"
這些內容對應的是~/.gitconfig文件,是用戶級別的配置文件
 
關聯遠程版本庫
git remote add origin http://192.168.1.37:3000/gogs/repolist.git
遠程版本庫名origin,這是個習慣用法,將創建origin和後面url的映射,這些信息保存在.git/config文件的新的端[remote "origin"]中
 
.git/config 這個文件是版本庫級別設置文件,這裏的設置具備最高優先級
 
推送數據
git push -u origin master
輸入密碼就能夠鏈接到遠程倉庫
私有的倉庫,必須登陸,只能本身看,爲了方便,修改成公有的
-u 第一次登錄的時候加上,之後就能夠不使用-u參數 git push origin master
 
存儲
 
命令
說明
git stash
暫時存儲最後一次提交後的變化,放入棧中
git stash pop
從棧中取出剛纔保存的變化,併合並
 
分支branch
多人協做一塊兒開發,開發項目中不一樣的獨立的功能,這些功能可能須要好幾天才能完成
代碼中至少有一個分支,就是主幹分支或稱主分支Master,默認都是在主分支上開發
圖中節點表示每一次提交
#~~~~~~~~~~~~~~~~~~~~~~
引入分支,解決定製版本後期分版本維護
 
分支名的條件要求:
分支名在版本庫中必須惟一
不能以-開頭
可使用/,可是不能以他結尾,被它分割的名稱不能以.開頭
不能使用兩個連續的..
不能包含任何空白字符,git的特殊符號
 
####
建立分支,須要指明從什麼分支上建立什麼名字的分支
相關文章
相關標籤/搜索