标签: pre-commit-hook

自动为新文件添加svn关键字属性(服务器端)

我想在提交新文件时将svn属性(如svn:keyword = Id Date Rev Author)添加到文件中.

为此,可能有两个主要选择:

  1. 客户端:更改svn客户端配置中的autoprops
  2. 服务器端:使用commit-hooks做一些魔术

客户端并不总是令人满意,因为需要对客户端设置进行控制.我想在服务器上解决这个问题.如何才能做到这一点.

svn properties server-side pre-commit-hook version-control-keywords

13
推荐指数
1
解决办法
8644
查看次数

lint-staged没有在precommit上运行

更漂亮的是没有预先运行.这在其他项目中使用相同的配置,所以我很困惑为什么这次不工作.

这是我的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)

javascript git pre-commit-hook prettier lint-staged

13
推荐指数
12
解决办法
9515
查看次数

在预提交脚本中检测分支重新集成或合并

在预提交脚本中,是否有可能(如果是,如何)识别源自svn merge?的提交?

svnlook changed ... 显示已更改的文件,但不区分合并和手动编辑.

理想情况下,我还想区分标准mergemerge --reintegrate.

背景:

我正在探索使用预提交挂钩来为我们的项目强制执行SVN使用策略的可能性.

其中一个策略声明某些目录(例如/trunk)不应直接修改,只能通过功能分支的重新集成进行更改.因此,预提交脚本将拒绝除分支重新集成之外对这些目录所做的所有更改.

有任何想法吗?


更新:

我已经探索过这个svnlook命令,而我最接近的就是检测并解析svn:mergeinfo对目录属性的更改.这种方法有一些缺点:

  1. svnlook可以标记属性的更改,但不会更改哪个属性.(需要使用proplist前一版本的差异)
  2. 通过检查更改svn:mergeinfo,可以检测svn merge已运行的更改.但是,无法确定提交是否纯粹是合并的结果.合并后手动进行的更改将不会被检测到.(相关帖子:针对另一个路径/修订版的Diff事务树)

svn svn-merge pre-commit-hook svnlook svn-merge-reintegrate

12
推荐指数
1
解决办法
1521
查看次数

在接受提交之前在git中强制执行代码标准

好吧,这就是场景:开发团队希望确保所有新代码都符合定义的编码标准,并且所有单元测试都在接受提交之前通过.这是诀窍,所有测试都需要在专用测试机器上运行,我们无权修改git服务器,因此必须使用每台开发机器上的本地提交挂钩来完成.

虽然规格非常严格(例如我们没有切换到Windows或颠覆),但这是一个现实问题,所以如果你有一个几乎适合的解决方案,那就有一些灵活性.

  • 我们正在使用Git和*nix.
  • 需要将更新的代码发送到另一台服务器以运行测试套件.
  • 需要提供修改文件列表以确保它们符合编码标准.
  • 它是一个相当大的代码库,所以我们应该发送必要的最少量的信息来确保相同的代码库副本.
  • 如果测试失败,则需要显示带有错误的消息,并且应该阻止提交.
  • 假设我们相信我们的开发团队,并允许通过--no-verify选项绕过测试.

问题:让测试服务器与本地环境同步以运行测试的最佳方法是什么?某种与新提交的git补丁的hash-to-hash匹配?完全跳过Git并做一个rsync吗?还有别的吗?

2013年7月7日更新:即使提到远程回购,我还是自己站了起来.关键是不要阻止代码被推送到共享/远程仓库,以防止本地提交发生.在这种情况下,这是否被认为是最佳实践并不是真正的重点,因为这是针对所有想要这些功能的小型开发团队所特有的.问题是关于实现目标的最佳方式.

git unit-testing pre-commit-hook

12
推荐指数
3
解决办法
9160
查看次数

在git中实施提交消息格式

我怎样才能在git中强制执行提交消息格式.可以将其设置在存储库级别,以便创建分支的每个人都可以执行此操作.

git pre-commit-hook

12
推荐指数
1
解决办法
7157
查看次数

如何lint for Typescript编译问题?

采用以下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,huskylint-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 …

pre-commit-hook typescript tslint husky lint-staged

12
推荐指数
1
解决办法
2971
查看次数

使用子文件夹中的 setup.cfg 预提交 flake8

flake8与一堆插件一起使用(,,flake8-docstrings)。我已将它们全部预安装到.flake8-isortflake8-blackvenv

\n

我的仓库要检查pre-commit

\n
    \n
  • 根文件夹有两个包
  • \n
  • 每个都有自己的\n
      \n
    • pyproject.toml(配置blackisort
    • \n
    • setup.cfg(配置flake8pydocstyle
    • \n
    \n
  • \n
\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)\n

我想为这两个包调用flake8via 。pre-commit

\n

这是我目前的做法:

\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)

pre-commit pre-commit-hook flake8 pre-commit.com

12
推荐指数
1
解决办法
7510
查看次数

如何确保所有预提交钩子在 CI/CD 中通过

我的团队在我们的存储库中使用预提交来运行各种代码检查和格式化程序。我的大多数队友都使用它,但有些人通过使用git commit --no-verify. 无论如何,是否可以在 CI/CD 中运行某些内容以确保所有预提交挂钩都通过(我们正在使用 GitHub 操作)。如果至少有一个钩子失败,则抛出一个错误。

pre-commit pre-commit-hook pre-commit.com

12
推荐指数
1
解决办法
1万
查看次数

仅对修改后的行使用PHP_CodeSniffer

我正在尝试在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)

php svn pre-commit-hook codesniffer

11
推荐指数
1
解决办法
1726
查看次数

在暂存文件上运行 eslint “ONLY”

我正在尝试使用预提交钩子在提交之前检测 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

11
推荐指数
2
解决办法
6816
查看次数