git 1

バージョン管理されていないソースコードを、バージョン管理するようにGitを使うようにした場合の説明をします。

環境は、Windowsで、Git Bashを使うとします。

Git BashのInstallについては、下記を参照ください。
WindowsでPythonを使う

管理対象

AさんがPythonで簡単な室温の管理を実装する場面を考えます。

古典制御理論 1

temperature_controller.py

import sys
import numpy as np
import matplotlib.pyplot as pyplot

x = np.arange( 1, 2000, 1 )
y = []

argv = sys.argv
COEFF = float( argv[1] )
TARGET = 10
COLD = 1

input = 0

for i in np.arange( 1, 2000, 1 ):
    y.append(input)
    diff = TARGET - input
    ## with a heater
    output = diff * COEFF
    ## It's cold outside.
    input += output - COLD

pyplot.plot( x,y )

y = np.full( 1999, TARGET )
pyplot.plot( x,y, color='r' )

pyplot.xlabel("x")
pyplot.ylabel("y", rotation=0)

pyplot.xlim(0, 200)
pyplot.ylim(0, 20)

pyplot.savefig('p.png')

P制御のみで作りましたが、定常偏差が割と大きく、Aさんは機能追加を検討し始めました。
でも、Aさんは機能追加前のソースコードも残しておくべきと考えたのでgitで管理することにしました。

ディレクトリ構成は下記とします。

  • temperature_controller
    • temperature_controller.py

git init

該当ディレクトリに移動します。


$ cd temperature_controller

該当ディレクトリの下にあるものをGitで管理できるようにします。


$ git init

.gitディレクトリが作成されていることを確認します。


$ ls -a

どのファイルが登録されているか、どのファイルが登録対象か、ファイルの内容が変更されているか、を確認します。


$ git status

git add

この例ではファイルが1つしかないので、下記で大丈夫です。
下記で全てのファイルを再帰的に登録します。


$ git add .

temperature_controller.pyが管理対象になります。

どのファイルが登録されているか、ファイルの内容が変更されているか、を確認します。


$ git status

IDEなどを使っていてバイナリファイルが生成されたりテキストファイルだけど頻繁かつ大量に更新される場合は、次の記事を参考にしてください。

git commit

ソースコードを登録します。


$ git commit

git bashを使っている場合、起動させるエディタの設定をしていなければviが起動します。
first commitと記入して:wqでcommitされます。

これで、変更したらgit diffで差分が見れます。

機能追加

Aさんは、P制御にI制御を追加してPI制御にしました。

古典制御理論 3

temperature_controller.py

import sys
from collections import deque
import numpy as np
import matplotlib.pyplot as pyplot

x = np.arange( 1, 2000, 1 )
y = []

argv = sys.argv
kp = float( argv[1] )
ki = float( argv[2] )
TARGET = 10
COLD = 1

input = 0
## q : FIFO queue depth
# q = int( argv[3] )
q = 10000
history = deque([])

counter = 0
for i in np.arange( 1, 2000, 1 ):
    y.append(input)
    diff = TARGET - input
    ## with a heater
    if counter < q:
        history.append( diff )
    else:
        history.append( diff )
        history.popleft()
    output = (diff * kp) + (sum( history ) * ki)
    ## It's cold outside.
    input += output - COLD
    counter += 1

pyplot.plot( x,y )

y = np.full( 1999, TARGET )
pyplot.plot( x,y, color='r' )

pyplot.xlabel("x")
pyplot.ylabel("y", rotation=0)

pyplot.xlim(0, 200)
pyplot.ylim(0, 20)

pyplot.savefig('pi.png')

完成したので、既に登録済みかつ変更したファイルを登録対象にします。


$ git add -u

確認します。


$ git status

登録します。


$ git commit

second commitでも構いませんが、add i control to p controlとか書いておけば分かりやすくなるでしょう。

git logで確認します。


$ git log

まとめ

簡単なgitの使い方を説明しました。

次の記事

次の記事はこちらです。
git 2



git 1
git 2
git 3


«       »