我怎么能告诉樱桃选择一个被压缩的提交范围?
或者换句话说,将两个提交之间的差异应用于存储库的当前状态?
以下就不能正常工作(摘樱桃没有--squash选项):
git cherry-pick --squash e064480..eab48b59c
Run Code Online (Sandbox Code Playgroud)
注意:我的用例是在一个子树场景中 - 在任何人开始争论我不应该压制之前.
以下工作,但后来我有一系列单独的提交.之后,我可以使用交互式rebase手动压缩它们.
git cherry-pick -X subtree=vendor/package e064480..eab48b59c
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以挤压作为樱桃挑选的一部分?
是否可以配置git diff来尊重缩进和语法?我不是在谈论忽略缩进和空格,而是使用空行,缩进级别和可能的括号,以帮助将旧行与新行匹配.
例如,git diff经常切换函数及其docblock,如下所示:
class C {
/**
+ * Goes to the bar.
+ */
+ function bar() {
+ return 'bar';
+ }
+
+ /**
* Gets your foo up to date.
*/
function foo() {
Run Code Online (Sandbox Code Playgroud)
当我愿意的时候
class C {
+
+ /**
+ * Goes to the bar.
+ */
+ function bar() {
+ return 'bar';
+ }
/**
* Gets your foo up to date.
*/
function foo() {
Run Code Online (Sandbox Code Playgroud)
在这个例子中它仍然是非常无害的,但是有些例子中函数及其docblock由于贪婪和天真的diff实现而被撕裂.
注意:我已经配置*.php diff=php了 …
场景:具有完全断开的历史记录的存储库.例如,来自不同的遥控器,没有共同的git历史.(这通常发生在使用git子树的场景中.)
是否有可能在这两个提交之间挑选差异,即使它们没有共同的历史?(并且活动提交与这两者中的任何一个都没有共同的历史)
我试过这个(进入带-X subtree=sub/dir选项的子目录):
git cherry-pick -X subtree=vendor/package aaa/aaa..bbb/bbb
Run Code Online (Sandbox Code Playgroud)
没有子树,这会更简单:
git cherry-pick aaa/aaa..bbb/bbb
Run Code Online (Sandbox Code Playgroud)
其中aaa/aaa和bbb/bbb是两个具有断开历史记录的提交.
不幸的是,这不起作用:aaa/aaa..bbb/bbb不是作为差异读取,而是其他东西.
同样可以显示git show aaa/aaa..bbb/bbb,这是完全不同的git diff aaa/aaa bbb/bbb.例如,如果两者都有相同的文件,那么git diff将为空,但是git show a..b将仅显示b,但不显示a.
注意:我的个人用例是子树背景.我提到这是为了避免人为使用案例,人们通常会开始讨论用例的有效性而不是实际的问题.
理想的答案首先解决一般情况,然后解决子树案例.
我的 IDE 检查我的 CSS 文件,并抱怨我是否放置了font-family没有通用后备的规则。一般来说,我必须同意我的IDE,我会很乐意添加字体回调。
例子:
.selector {
font-family: Arial; /* IDE complains. */
font-family: Arial, sans-serif; /* IDE is happy. */
}
Run Code Online (Sandbox Code Playgroud)
但是,有时 font-family 是一种图标字体(我认为 fontawesome 就是其中之一),并且回退并没有真正意义。或者是吗?
.my-icon {
font-family: 'my-icon-font'; /* IDE complains. */
font-family: 'my-icon-font', serif; /* IDE is happy, but it does not make sense. */
}
Run Code Online (Sandbox Code Playgroud)
是否有任何合理的回退可以将图标字体附加到字体系列规则中?
就我而言,主要是我的 IDE 促使我添加通用字体回调。作为最后的手段,我可以禁用、抑制或忽略此检查。
然而,在其他团队中,可能有关于代码约定的严格规则,甚至可能是一种机制,如果他们不遵守就阻止提交。
或者,如果我是代码检查工具的作者,或者正在定义要在项目中使用的编码约定怎么办?那么我肯定想知道什么是“正确”或最聪明的方法来做到这一点:)
简而言之:
我有一台带有Win XP,Windows 7和Ubuntu的多重启动机器,我希望我的localhost web项目能够被所有三个操作系统共享.
详细信息:
我最终想要摆脱Windows XP进行Web开发工作,但是我的本地Apache + PHP + MySQL堆栈与我的旧操作系统相关联,我花了一些时间思考将这种设置调整到它的方式现在.
如果我可以将数据库和Web文件放在独立于当前操作系统的位置,那将是很好的,因此我可以使用不同的操作系统重新启动并继续处理相同的项目.
理想情况下,我还想保留和共享其他应用程序的设置和文件(Firefox插件,Opera键盘快捷键,邮件和聊天帐户,Eclipse设置等),但这可能是另一个问题.
如果可能的话,我想避免严重的性能命中.
最后,一旦我选择了解决方案,如果我能找到一种简单的方法将设置从Windows XP设置移植到新的共享环境,那就太好了.特别是:数据库,htdocs文件夹,vhost设置.
VirtualBox或vmware是解决方案吗?或者便携式应用的东西?或者我应该在每个操作系统上运行单独的Apache/MySQL/PHP,然后让它们共享它们的设置和htdocs文件?
谢谢!
Drupal可以选择将多个js或css文件"聚合"(即组合)成一个文件,以减少通过网络传输的文件数量.
Meteor有类似的东西吗?显然,对于开发来说,将文件全部分开是更好的.但是在生产中将它们捆绑(并缩小)会很棒.
假设补丁是从过去的特定提交创建的,并且不再适用于HEAD。
我如何找到HEAD历史记录中的第一个提交或更好的最后一个提交,在此补丁中加上“ git apply”?也许有git bisect吗?但是哪个命令会告诉我是否有补丁?
理想情况下,除非有冲突,否则我想返回到该提交,应用补丁,然后基于原始HEAD或与之合并,然后再次进行比较以创建新补丁。在此之后,我想回到原始的HEAD,以便可以继续安装更多补丁。
背景:有许多补丁需要重新发布...(是的,在某些生态系统中,补丁仍然很重要。)
我知道yield可以用于创建数据迭代器,例如从CSV文件读取数据。
function csv_generator($file) {
$handle = fopen($file,"r");
while (!feof($handle)) {
yield fgetcsv($file);
}
fclose($file);
}
Run Code Online (Sandbox Code Playgroud)
但是Generator :: send()方法建议我可以对顺序写入而不是读取进行相同的操作。
例如,我想使用这样的东西:
function csv_output_generator($file) {
$handle = fopen('file.csv', 'w');
while (null !== $row = yield) {
fputcsv($handle, $row);
}
fclose($handle);
}
$output_generator = csv_output_generator($file);
$output_generator->send($rows[0]);
$output_generator->send($rows[1]);
$output_generator->send($rows[2]);
// Close the output generator.
$output_generator->send(null);
Run Code Online (Sandbox Code Playgroud)
我认为以上方法会起作用。
但是$output_generator->send(null);对于关闭似乎是错误的,还是不理想的。这意味着我永远无法发送原义的null。可以用csv编写,但是也许有一个发送null的用例。
是否有使用PHP生成器进行顺序编写的“最佳实践”?
(TLDR) 有没有办法在git rebase -i没有提交 ID 的情况下停止编辑?(/TLDR)
更长的版本:
使用git rebase -i,我得到了一个文本编辑器,可以在其中定义命令列表,从pick COMMIT_ID每行开始。
其中一个选项是将“pick COMMIT_ID”替换为“edit COMMIT_ID”,这意味着它将在提交后停止,以便我修改提交,或者进行一些手动操作。然后我就可以继续了git rebase --continue。
从选项列表中:
# e, edit = use commit, but stop for amending
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个选项可以停止编辑,而不选择任何提交。
例如,如果我想压缩一系列提交,然后停止进行一些手动操作,我必须将编辑 + 压缩放在同一个提交 ID 前面 - 这是不允许的。
相反,我会做这样的事情:
pick COMMIT_0 Change some colors
pick COMMIT_1 Make it faster
squash COMMIT_2 Fix a typo in previous commit
squash COMMIT_3 Fix another typo in previous commit
edit
pick COMMIT_4 Refactor some things
pick …Run Code Online (Sandbox Code Playgroud) 我想通过.htpasswd保护一个Web文件夹.但是,由于.htaccess文件受版本控制,我宁愿不要乱用它.
相反,我想在
/ etc/apache2/sites-enabled/mysite
/etc/apache2/.htpasswd中进行配置
知道我需要在"mysite"apache配置文件中添加什么内容吗?
到目前为止它是这样的,
<VirtualHost (ip address):80>
ServerName my.domain
DocumentRoot /var/sites/sitename
ServerAdmin ...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)