我想在提交新文件时将svn属性(如svn:keyword = Id Date Rev Author)添加到文件中.
为此,可能有两个主要选择:
客户端并不总是令人满意,因为需要对客户端设置进行控制.我想在服务器上解决这个问题.如何才能做到这一点.
svn properties server-side pre-commit-hook version-control-keywords
更漂亮的是没有预先运行.这在其他项目中使用相同的配置,所以我很困惑为什么这次不工作.
这是我的package.json文件的相关部分:
"scripts": {
"precommit": "lint-staged"
},
"lint-staged": {
"*.{js,json,css,scss,html,md}": [
"prettier --write",
"git add"
]
},
Run Code Online (Sandbox Code Playgroud)
编辑.以下是相关的devDependencies:
"devDependencies": {
"husky": "^0.14.3",
"lint-staged": "^7.0.4",
"prettier": "1.12.0"
},
Run Code Online (Sandbox Code Playgroud) 在预提交脚本中,是否有可能(如果是,如何)识别源自svn merge?的提交?
svnlook changed ... 显示已更改的文件,但不区分合并和手动编辑.
理想情况下,我还想区分标准merge和merge --reintegrate.
我正在探索使用预提交挂钩来为我们的项目强制执行SVN使用策略的可能性.
其中一个策略声明某些目录(例如/trunk)不应直接修改,只能通过功能分支的重新集成进行更改.因此,预提交脚本将拒绝除分支重新集成之外对这些目录所做的所有更改.
有任何想法吗?
我已经探索过这个svnlook命令,而我最接近的就是检测并解析svn:mergeinfo对目录属性的更改.这种方法有一些缺点:
svnlook可以标记属性的更改,但不会更改哪个属性.(需要使用proplist前一版本的差异)svn:mergeinfo,可以检测svn merge已运行的更改.但是,无法确定提交是否纯粹是合并的结果.合并后手动进行的更改将不会被检测到.(相关帖子:针对另一个路径/修订版的Diff事务树)好吧,这就是场景:开发团队希望确保所有新代码都符合定义的编码标准,并且所有单元测试都在接受提交之前通过.这是诀窍,所有测试都需要在专用测试机器上运行,我们无权修改git服务器,因此必须使用每台开发机器上的本地提交挂钩来完成.
虽然规格非常严格(例如我们没有切换到Windows或颠覆),但这是一个现实问题,所以如果你有一个几乎适合的解决方案,那就有一些灵活性.
--no-verify选项绕过测试.问题:让测试服务器与本地环境同步以运行测试的最佳方法是什么?某种与新提交的git补丁的hash-to-hash匹配?完全跳过Git并做一个rsync吗?还有别的吗?
2013年7月7日更新:即使提到远程回购,我还是自己站了起来.关键是不要阻止代码被推送到共享/远程仓库,以防止本地提交发生.在这种情况下,这是否被认为是最佳实践并不是真正的重点,因为这是针对所有想要这些功能的小型开发团队所特有的.问题是关于实现目标的最佳方式.
我怎样才能在git中强制执行提交消息格式.可以将其设置在存储库级别,以便创建分支的每个人都可以执行此操作.
采用以下Typescript箭头功能:
/**
* Returns a probably unique component name.
*
* @param baseName a suggested name to make unique.
* @returns a probably unique name.
*/
export const getUniqueComponentName = (
baseName
): string => {
return baseName + Math.round(Math.random() * 10000000)
}
Run Code Online (Sandbox Code Playgroud)
当Typescript配置tsconfig.json为这样时:
"noImplicitAny": true,
Run Code Online (Sandbox Code Playgroud)
这正确导致编译错误:
[ts]参数'baseName'隐式具有'any'类型.
Visual Studio Code也非常智能,可以在开发过程中告知您这个问题.
我的目标是创建一个precommit git hook,以防止此类错误在版本控制中结束.我试着这样做tslint,husky并lint-staged使用这个npm script:
"lint": "tslint --project tsconfig.json --config tslint.json"
Run Code Online (Sandbox Code Playgroud)
但是,这不会导致tslint显示编译错误.它被默默地忽略了.
然后我尝试在tslint.json中添加一条规则:
"typedef": [
true,
"arrow-parameter"
]
Run Code Online (Sandbox Code Playgroud)
虽然这确实让tslint抱怨,但它也开始抱怨匿名箭头函数,tsc …
我flake8与一堆插件一起使用(,,flake8-docstrings)。我已将它们全部预安装到.flake8-isortflake8-blackvenv
我的仓库要检查pre-commit:
pyproject.toml(配置black和isort)setup.cfg(配置flake8和pydocstyle)\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 (the package)\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 (the package)\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 venv\nRun Code Online (Sandbox Code Playgroud)\n我想为这两个包调用flake8via 。pre-commit
这是我目前的做法:
\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 (the package)\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 (the package)\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 venv\n …Run Code Online (Sandbox Code Playgroud) 我的团队在我们的存储库中使用预提交来运行各种代码检查和格式化程序。我的大多数队友都使用它,但有些人通过使用git commit --no-verify. 无论如何,是否可以在 CI/CD 中运行某些内容以确保所有预提交挂钩都通过(我们正在使用 GitHub 操作)。如果至少有一个钩子失败,则抛出一个错误。
我正在尝试在SVN中构建一个预提交脚本,我想仅在修改的行上运行PHP_CodeSniffer (而不是整个文件).到目前为止,我有这个脚本:
#!/bin/sh
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
grep "[a-zA-Z0-9]" > /dev/null || exit 1
# Check for code validation before commiting the script using PHP_CodeSniffer
/tmp/pear/download/PHP_CodeSniffer-1.4.3/scripts/phpcs-svn-pre-commit "$REPOS" -t "$TXN" >&2 || exit 1
# All checks passed, so allow the commit.
exit 0
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用预提交钩子在提交之前检测 eslint 错误。我正在使用 husky 和 lint-staged。但它对 src 中的所有文件运行 lint 命令,而不仅仅是对暂存文件运行。这是我的 package.json 文件。
"scripts": {
"test:ci": "cross-env CI=true react-scripts test --bail --passWithNoTests",
"lint": "eslint src/**/*.{js,jsx}",
"lint:fix": "eslint . --fix",
"precommit": "npm run lint && npm run test:ci"
}
Run Code Online (Sandbox Code Playgroud)
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
Run Code Online (Sandbox Code Playgroud)
"lint-staged": {
"*.js": [
"npm run precommit"
],
"*.jsx": [
"npm run precommit"
]
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以使它仅适用于暂存文件而不适用于目录中存在的其他文件?
pre-commit-hook eslint husky eslint-config-airbnb lint-staged
pre-commit-hook ×10
git ×3
lint-staged ×3
svn ×3
husky ×2
pre-commit ×2
codesniffer ×1
eslint ×1
flake8 ×1
javascript ×1
php ×1
prettier ×1
properties ×1
server-side ×1
svn-merge ×1
svnlook ×1
tslint ×1
typescript ×1
unit-testing ×1