我想获得一个只有分阶段文件名的列表.我找不到--name-only该git status命令的等效标志.什么是好的选择?
文件列表将通过管道传递给php -l(PHP lint语法检查器).
解决方案:完整的命令
git diff --name-only --cached | xargs -l php -l
Run Code Online (Sandbox Code Playgroud) 我在GitHub的开放小说中保留的一个东西是我想自动设置第一行的单词列表,这是字典中单词的数量.我的第一个选择是编写一个预提交钩子,它读取文件,计算单词,重写第一行并再次写回.这是代码
PRE_COMMIT {
my ($git) = @_;
my $branch = $git->command(qw/rev-parse --abbrev-ref HEAD/);
say "Pre-commit hook in $branch";
if ( $branch =~ /master/ ) {
my $changed = $git->command(qw/show --name-status/);
my @changed_files = ($changed =~ /\s\w\s+(\S+)/g);
if ( $words ~~ @changed_files ) {
my @words_content = read_file( $words );
say "I have $#words_content words";
$words_content[0] = "$#words_content\n";
write_file( $words, @words_content );
}
}
};
Run Code Online (Sandbox Code Playgroud)
但是,由于该文件已经暂存,我收到此错误
错误:checkout将覆盖对以下文件的本地更改:text/words.dic请在提交更改或存储更改之前切换分支.中止
可能最好将它作为一个后提交钩子并将其更改为下一次提交?或者做一些完全不同的事情?一般问题是:如果您想在提交期间处理和更改文件的内容,那么正确的方法是什么?
我正在尝试使用一系列单元测试进行预提交钩子,我想确保我的工作目录是干净的.编译需要很长时间,所以我希望尽可能利用重用编译的二进制文件.我的脚本遵循我在网上看到的例子:
# Stash changes
git stash -q --keep-index
# Run tests
...
# Restore changes
git stash pop -q
Run Code Online (Sandbox Code Playgroud)
这会导致问题.这是repro:
// Step 1到a.javagit add .// Step 2到a.javagit commit
git stash -q --keep-index #存储更改git stash pop -q #恢复更改此时我遇到了问题.该git stash pop -q显然有冲突,a.java我有
// Step 1
<<<<<<< Updated upstream
=======
// Step 2
>>>>>>> Stashed changes
Run Code Online (Sandbox Code Playgroud)
有没有办法让这个流畅干净?
是有办法有一个pre-commit钩子,其自动格式化代码(例如用astyle),但并没有破坏的部分提交吗?
工作流程:
# edit a file.txt
git add -p file.txt
# add one chunk, but not another
git commit -m 'a message'
[PRE_COMMIT_HOOK] Formatting source code
git status
# the "another" chunk is still not added
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果你git add在预提交钩子里面做了一个,这是在脚本格式化源代码之后需要的,那么也添加了"另一个"块.但我不希望这样.
有没有办法实现这个目标?