我需要创建一个通用脚本,在保存文件时将这些信息添加到每个文件中,例如Atom或WebStorm等文本编辑器。
添加信息:
以下是我使用shell创建的代码示例。
#! /bin/bash
# Abort if any of the commands fail
set -e
# Trace what gets executed. Useful for debugging.
set -x
# If set, the return value of a pipeline is the value of the last (rightmost) command to
#exit with a non-zero status, or zero if all commands in the pipeline exit successfully.
set -o pipefail
# Treat unset variables as an error when performing parameter expansion.
# If expansion is attempted on an unset variable, the shell prints an error message,
# and, if not interactive, exits with a non-zero status.
set -u
# Created:
DATE=$(date +%Y-%m-%d:%H:%M:%S);
BRANCH=$(git symbolic-ref --short -q HEAD);
GIT_USER=$(git config user.name);
CREATED=$(echo 'created');
# Updated:
DATE_U=$(git log -1 --format=%cd --date=format:%Y-%m-%d:%H:%M:%S);
BRANCH_U=$(git symbolic-ref --short -q HEAD);
GIT_USER_U=$(git config user.name);
UPDATED=$(echo 'updated');
# Find file (js) and add table to file.
echo "Create table in js-file..."
if test -a $(grep created: ./development/*.js); then
sudo find ./development -name "*.js" -type f -exec sed -i 1i\ "/*flow*/\n/*---------------------------------------------------------\n $CREATED: $DATE | $BRANCH | $GIT_USER \n $UPDATED: $DATE_U | $BRANCH_U | $GIT_USER_U \n---------------------------------------------------------*/" {} \;
echo "Create table..."
else
echo "Table already is exist..."
fi
# Find file (scss) and add to file.
echo "Create table in scss-file..."
if test -a $(grep created: ./development/*.scss); then
sudo find ./development -name "*.scss" -type f -exec sed -i 1i\ "/*---------------------------------------------------------\n $CREATED: $DATE | $BRANCH | $GIT_USER \n $UPDATED: $DATE_U | $BRANCH_U | $GIT_USER_U \n---------------------------------------------------------*/" {} \;
echo "Create table..."
else
echo "Table already is exist..."
fi
在添加表的命令中,有一个缺点,在第一次添加到文件后,该表不再适用于稍后创建的文件或其中的表被删除。
第二个问题是文件中信息的动态更新。
# Updated
echo "Update date area..."
if test ! -a $DATE_U;
then
echo "Date is exist..."
else
echo "Update date..."
fi
echo "Update branch area..."
if test ! -a $BRANCH_U;
then
echo "Branch is exist..."
else
echo "Update branch..."
fi
echo "Update user area..."
if test ! -a $GIT_USER;
then
echo "User is exist..."
else
echo "Update user..."
fi
答案 0 :(得分:1)
真的您是否需要在文件中提供元数据?
在文件中存储元数据通常是旧的集中式SCM的习惯 但是在git中,由于您需要在本地克隆整个repo,因此您可以直接访问所有元数据。
因此,您可以在需要时通过以下方式访问它们:
# Data of first commit of file
git log -1 --diff-filter=A --format='%an | %aI | %h' -- path/to/file
# Data of last commit of file
git log -1 --format='%an | %aI | %h' -- path/to/file
如果你真的想把它们放在你的文件中,推荐的方法是使用keyword-expansion(就像CVS或SVN一样)。
但,它无法解决在每个文件中添加占位符的必要性。
如果要使用占位符强制执行标头创建,则需要使用其他clean
过滤器在升级文件时即时修改文件(请参阅Can you change a file content during git commit?)。
但是,您必须在与您的存储库交互的所有git客户端上部署并强制使用此过滤器。
您可以使用server-side hooks拒绝发布提交而不使用标题修改文件。