バージョン管理されていないソースコードを、バージョン管理するようにGitを使うようにした場合の説明をします。
環境は、Windowsで、Git Bashを使うとします。
Git BashのInstallについては、下記を参照ください。
WindowsでPythonを使う
管理対象
AさんがPythonで簡単な室温の管理を実装する場面を考えます。
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制御にしました。
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