Questions tagged «git»

Git是一个开源的分布式版本控制系统(DVCS)。使用此标签可解决有关Git使用和工作流程的问题。不要仅仅因为存储库恰好托管在GitHub上而使用[github]标签来解决与Git相关的问题。另外,请勿对碰巧涉及Git储存库的一般编程问题使用此标记。


1
git不会忽略2个专门命名的文件
我想从提交中自动排除2个文件,这些文件是git存储库的一部分,但有一些更改,不应包含在github存储库中,因为它们有一些更改仅对我的本地系统有意义,而对其他系统没有意义开发人员。 我添加了它们,.git/info/exclude希望git理解他不应该对它们进行更改: # git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] a.conf b.conf # *~ 但git status仍将其列为提交阶段: # …
70 git  gitignore 

3
如何在Git存储库中为所有提交移动目录?
假设我有一个包含以下目录结构的存储库: repo/ blog/ _posts/ some-post.html another-file.txt 我想移到存储库_posts的顶层,因此结构如下所示: repo/ _posts/ some-post.html another-file.txt 这样做很简单git mv,但是我想使历史看起来好像_posts 一直存在于仓库的根部,并且我希望能够获得some-post.htmlvia的全部历史git log -- _posts/some-post.html。我想我可以使用一些魔术git filter-branch来完成此操作,但是我还没有弄清楚该怎么做。有任何想法吗?



7
Git 1.7.0中的稀疏结帐?
借助Git 1.7.0中新的稀疏签出功能,是否有可能像在SVN中那样仅获取子目录的内容?我找到了这个示例,但是它保留了完整的目录结构。想象一下,我只想要“ perl”目录的内容,而没有一个名为“ perl”的实际目录。 -编辑- 例: 我的git储存库包含以下路径 repo/.git/ repo/perl/ repo/perl/script1.pl repo/perl/script2.pl repo/images/ repo/images/image1.jpg repo/images/image2.jpg repo/doc/ repo/doc/readme.txt repo/doc/help.txt 我想要的是能够从上述存储库中产生此布局: repo/.git/ repo/script1.pl repo/script2.pl 但是,使用当前的稀疏签出功能,似乎只能 repo/.git/ repo/perl/script1.pl repo/perl/script2.pl 这不是我想要的。


2
如何使用git-bundle保持开发同步?
我需要使开发树在不同的计算机上保持同步,并且它们之间没有网络连接。 我们有一个中央git存储库,通常我在办公室计算机上使用自己的克隆进行工作。有时,我需要在另一台从未连接到办公室网络的计算机上进行一些开发。没有计算机连接到Internet。同步之间可以在两台计算机上执行开发。 我已经阅读了git-bundle的帮助页面,这似乎是最好的工具,但是我不确定如何设置好的工作流程。 你能给我一些建议或指示吗?
70 git  git-bundle 


2
在git show / git diff中将tabwidth设置为4
在工作中,我们有几位开发人员,没有代码样式指南,有些开发人员使用制表符缩进,另一些开发人员使用4个空格(幸运的是,缩进的人都没有使用4个空格)。通常,这不是(大)问题,因为在我们的编辑器中我们进行了设置,tabwidth=4并且所有缩进似乎都是正确的。 但git diff还是git show那出现什么: diff --git a/mesclatabs.php b/mesclatabs.php new file mode 100644 index 0000000..1986c91 --- /dev/null +++ b/mesclatabs.php @@ -0,0 +1,5 @@ +<?php +function foo() { + echo "line with 1 tab\n"; + echo "line with 4 spaces\n"; +} 问题是git diff或者git show每个选项卡出现了多达8个空格(实际上,实际上是作为一个选项卡出现了,而shell(我的情况是bash)将选项卡显示为8个空格)。这样,但是我想知道git是否可以选择将制表符输出为diff/中的4个空格show,因为有些开发人员使用zsh而不是bash。 有任何想法吗?
70 git  bash  tabs  whitespace  spaces 

9
强制git运行接收后钩子,即使一切都是“最新的”
即使我没有要提交的新提交,如何强制在服务器上git运行post-receive挂钩? 背景 我使用git自动将网站部署到服务器。我在服务器的受保护区域中有一个裸仓库,还有一个post-receive钩子,用于检出内容并将某些文件系统地复制到public_html文件夹中。(受本教程的启发) 我已经厌倦了post-receive在服务器上手动修改钩子,所以post-receive现在我的钩子实际上从仓库中复制了自己的新版本: #!/bin/sh rm -rf ~/../protected/* GIT_WORK_TREE=~/../protected git checkout -f # Rewrite over this file with any updates from the post-receive file cp ~/../protected/post-receive hooks/post-receive # Delete public_html # Copy stuff public_html 当然,问题在于新的post-receive挂钩永远不会运行。一个看似简单的解决方案只是重新推动,但现在一切都已更新。这很烦人,因为每次更新post-receive钩子时都要求我伪造新的提交。有没有一种方法可以在post-receive不伪造提交或ssh输入的情况下调用该钩子? 我尝试了什么 git push git push -f
70 git 

5
无法忽略Git存储库中以前忽略的文件
我有一个网站,该网站的/sites/default/files/目录通常会保存用户内容。考虑到我不需要跟踪这些东西,我在/ gitignore文件中添加了/ sites / default / files /。 然后我发现我也想在该目录中保留一些大多数永久性的上载。现在,更有意义的是跟踪/ sites / default / files /中的所有内容并排除不需要的子目录,而不是相反。 问题在于,Git不会停止忽略该目录。我从.gitignore中删除了指定此目录的行,并且该行不会跟踪它。我可以选择git add /sites/default/files/ -f强制git跟踪目录,但是我之前已经做过,而且看起来很乱。 如果.gitignore不再指定该目录为忽略目录,为什么我必须强制Git开始跟踪那些文件?
70 git  gitignore 

4
没有共同的参考,也没有指定参考;什么也不做
我有一个本地git项目,想要添加到gitolite中。显然这很难,所以我放弃了这个主意。我通过将其添加到gitolite-admin / conf / gitolite.conf中并提交并推送更改来创建一个新的gitolite回购。然后,我git clone git-noah:project-name成功克隆了新的仓库。然后,我将.git以外的所有文件和文件夹复制到项目名称文件夹。我做到了 git add -A git commit -a -m "Moved to new repo." git push 我收到此错误: warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, …
70 git  gitolite 

3
Git的打包文件是增量文件,而不是快照?
Git与大多数其他版本控制系统之间的主要区别之一是,其他版本控制系统倾向于将提交存储为一系列增量-一个提交与下一个提交之间的变更集。这似乎是合乎逻辑的,因为它是存储有关提交的尽可能少的信息。但是提交历史记录越长,用于比较修订范围的计算就越多。 相比之下,Git在每个修订版中存储整个项目的完整快照。每次提交不会使仓库的大小显着增加的原因是项目中的每个文件都作为文件存储在Git子目录中,并以其内容的哈希命名。因此,如果内容未更改,则哈希值也未更改,并且提交仅指向同一文件。还有其他优化。 所有这些对我来说都是有意义的,直到我偶然发现了有关pack文件的信息,Git定期将数据放入其中以节省空间: 为了节省空间,Git利用了packfile。这是一种格式,其中Git仅将更改过的部分保存在第二个文件中,并带有指向该文件的指针。 这基本上不是回到存储增量吗?如果没有,那有什么不同?如何避免Git遭受其他版本控制系统所遇到的相同问题? 例如,Subversion使用增量,而回滚50个版本意味着撤消50个差异,而使用Git,您只需获取适当的快照即可。除非git也将50个差异存储在packfile中...否则是否有某种机制说“在少量增量之后,我们将存储一个新快照”,这样我们才不会堆积太大的变更集?Git还能如何避免三角洲的弊端?

5
在Posh-Git中更改“ git status”输出颜色
在Posh-Git中,当我在存储库中运行“ git status”时,当我尝试将它们配置为“正常”红色时,更改和未跟踪文件的颜色为深红色。我要这样做是因为我的控制台背景很暗,所以很难读懂深红色。 我四处搜寻,似乎需要进行两个配置更改: 在$ GitPromptSettings中将“ WorkingForegroundColor”和“ UntrackedForegroundColor”从“ DarkRed”更改为“ Red”。 在git config中将“ color.status.changed”和“ color.status.untracked”更改为红色。 根据我的阅读,这就是我所需要做的,但是“ git status”的结果仍然是深红色。 这是一个摘要,以证明我按照我的要求进行设置,也许有人可以发现错误:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.