长话短说:我们正在使用Jupyter笔记本(.ipynb
文件)并设置了Jupyter配置以保存.py
份副本(àlathis answer on SO),以便更好地使用git diffs)。
因此,每次保存.ipynb
文件时,都会保存.py
版本,否则文件名相同。如果尚未存在.py
版本,则会创建一个新版本。
是否可以自动添加/跟踪这些新创建的.py
文件,可能是通过在git配置中放置一些东西?
所以这可能是使用git预提交钩子,阅读它。但是,我真的不知道从头开始写一个钩子。
重申我想要的内容:我保存foo_bar.ipynb
,自动创建foo_bar.py
。如果我这样做,我希望预提交钩子添加foo_bar.py
,例如git commit -a
。 要强调,我不希望它添加任何旧的.py
文件,只能添加与现有.ipynb
文件具有相同文件名的文件。
答案 0 :(得分:1)
编写一个脚本,将新的和更新的文件添加到Git并提交它们。手动运行或作为cron作业运行。更好的是,如果可能的话,将其挂钩到生成文件的工具中,以便在每次工具保存文件或退出文件时运行。
脚本可以简单如下:
# Change directory
cd /path/to/the/directory/where/the/py/files/are/saved
# Set this to 1 when a commit is needed
commit=0
# Check all the .ipynb files
for i in *.ipynb; do
# Generate the name of the corresponding .py file
p=${i//.ipybn}.py
# If the .py file exists
if [ -f $p ]; then
# Add it to be committed; it doesn't hurt if it is not modified
git add $p
# Remember we have to commit at the end
commit=1
fi
done
# Avoid running "git commit" when nothing was staged
if [ $commit -eq 1 ]; then
# Commit, generate an unique (not very useful) commit message.
git commit -m "automatic commit on $(date +'%Y-%m-%d %H:%I:%S')"
fi
上面的代码假设所有.ipynb
文件都存储在一个目录中(没有子目录),相应的.py
文件存储在同一目录中。
如果.ipynb
个文件存储在多个目录中,则将for
行替换为:
for i in $(find . -name \*.ipynb); do
如果.py
文件未存储在与相应.ipybn
文件相同的目录中,则必须更改行p=${i//.ipybn}.py
。
在暂存文件之前,可以验证多个条件。