我使用个人项目的git,认为这是伟大的。 它快速,灵活,function强大,对远程开发非常有用。 但是现在它在工作中被授权,坦率地说,我们遇到了问题。 开箱即用,git在大型(20+开发者)组织中集中开发并不适合开发人员,这些开发人员具有不同的能力和git复杂程度 – 尤其是与其他源代码控制系统(如Perforce或Subversion)相比,瞄准那种环境。 (是的,我知道,Linus从来没有这样做。) 但是 – 出于政治原因,即使我们正在试图用它做什么,我们也会被git困住。 以下是我们看到的一些事情: GUI工具还不成熟 使用命令行工具,很容易搞砸一个合并,并消除别人的变化 它不提供超出全局只读或读写权限的每用户存储库权限 如果您有权限访问存储库的任何部分,则可以对存储库的每个部分执行相同的操作,因此您无法在中央服务器上创build小组跟踪分支,而其他人无法做到这一点乱七八糟的。 “任何事情都行”或“仁慈的独裁者”以外的工作stream很难鼓励,更不用说强制执行了 目前尚不清楚是否最好使用一个单一的大型资源库(可以让所有人都搞砸),或者是每个组件库有很多(这使得头版试图同步版本)。 有了多个版本库,也不清楚如何从中央库复制别人所有的源代码,或者在昨天下午4点半之前完成所有的工作。 但是,我听说有人在大型开发组织中成功地使用git。 如果你处在这种情况下 – 或者你通常有一些工具,技巧和诀窍,使得在一些大型组织中使用git变得更容易和更有效率,那里的一些人不是命令行的粉丝 – 我很想听听你有什么build议。 顺便说一句,我已经在LinkedIn上提出了这个问题的一个版本,并没有真正的答案,但很多“天哪,我也很想知道这个!” 更新:让我澄清… 在我工作的地方,我们不能使用除git之外的其他任何东西 。 这不是一个选项。 我们一直坚持下去。 我们不能使用1987年使用的mercurial,svn,bitkeeper,Visual Source Safe,ClearCase,PVCS,SCCS,RCS,市场,Darcs,单调,Perforce,Fossil,AccuRev,CVS,甚至苹果公司的好投影机。所以,当你欢迎讨论其他选项时, 如果你不讨论git , 你将不会得到赏金。 另外,我正在寻找关于如何在企业中使用git的实用技巧 。 我在这个问题的顶部列出了一整套我们遇到的问题。 再次,人们欢迎讨论理论,但如果你想获得赏金,给我解决scheme。
目标是获得可以在shell命令中评估的明确状态。 我试过git status但它总是返回0,即使有项目提交。 git status echo $? #this is always 0 我有一个想法,但我认为这是一个不好的主意。 if [ git status | grep -i -c "[az]"> 2 ]; then code for change… else code for nothing change… fi 任何其他方式? 更新,现在这个解决scheme看看Mark Longair的post 我试过这个,但是造成了一个问题。 if [ -z $(git status –porcelain) ]; then echo "IT IS CLEAN" else echo "PLEASE COMMIT YOUR CHANGE […]
我克隆了一个git仓库,然后签出一个标签: # git checkout 2.4.33 -b my_branch 这是好的,但是当我尝试在我的分支中运行git pull时,git吐出这个错误: 没有当前分支的跟踪信息。 请指定您想要合并的分支。 有关详细信息,请参阅git-pull(1) git pull <remote> <branch> 如果你想设置这个分支的跟踪信息,你可以这样做: git branch –set-upstream new origin/<branch> 我想git pull只更新主分支,离开我当前的分支(无论如何这是一个标签)。 是这样的可能吗? 我需要这个的原因是我有一个自动脚本总是git拉仓库,当然因为上面的错误失败..
我正在使用下面的命令来找出在我的仓库中是否存在一个branch-name的本地 git分支。 它是否正确? 有没有更好的办法? 请注意,我正在脚本内部执行此操作。 出于这个原因,如果可能的话,我想远离瓷器的命令。 git show-ref –verify –quiet refs/heads/<branch-name> # $? == 0 means local branch with <branch-name> exists. 更新 原来还有另一种方法 。 谢谢@ jhuynh 。 git rev-parse –verify <branch-name> # $? == 0 means local branch with name <branch-name> exists.
我有一个问题,我有一个大的提交,改变了大约一千行的代码,从行尾删除空格,并删除空格之前的制表符。 这个项目也有大约50个pull请求,当我的提交被合并时,这些请求都会有冲突。 有没有什么办法可以设置git,以便在合并未来的提交时忽略其中一个只是空白变化的冲突? 修改git本身或使用第三方工具是不可能的,但使用钩子是好的。
我试图添加我目前正在工作(签出)在bash提示没有成功的git分支..( 同时保持我的当前path显示活动目录/文件完好无损)我有一个.bashrc文件在我家,但我也看到很多人提到.profile文件..
我已经通过互动的基础变成了一个混乱,现在我想放弃它。 (即回到之前,我被放入到交互式git pull –rebase模式,在我的情况下,通过git pull –rebase 。)做到这一点的方式似乎是通过git rebase –abort ,但这是行不通的: $ git rebase –abort error: Ref refs/heads/master is at 55b388c141b1485b1acd9e050dbeb0eb90ef2ee7 but expected b918ac16a33881ce00799bea63d9c23bf7022d67 fatal: Cannot lock the ref 'refs/heads/master'. Could not move back to refs/heads/master 我怎样才能摆脱交互式底线模式,并清除所有对它的引用? ( git reset –hard成功了,但是不会让我脱离rebase模式。)
我有同样的问题在这里问: 在根目录中的新git存储库包含子目录中存在的存储库 我在这里遵循这个答案: 在根目录中的新git存储库包含子目录中存在的存储库 现在, gitk –all显示了两个历史logging:一个在当前的master ,一个名为original/refs/heads/master 。 我不知道这第二个历史是什么,或者如何从回购中删除它。 我的资料库中不需要两个历史logging。 我如何摆脱它? 重现自我: mkdir -p project-root/path/to/module cd project-root/path/to/module mkdir dir1 dir2 dir3 for dir in * ; do touch $dir/source-file-$dir.py ; done git init git add . git commit -m 'Initial commit' 现在我们有原始的海报的问题。 让我们使用上面链接的答案将git仓库的根移到project-root: git filter-branch –tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 […]
如何从命令行inputGit commit消息中的感叹号? 可以用反斜线转义感叹号,但反斜杠也会在提交消息中结束。 我想要这样的东西: git commit -am "Nailed it!"
准备一个Unity项目提交git仓库所需的步骤是什么,例如。 GitHub的? 我不想存储不必要的文件(特别是临时文件,尽可能避免二进制格式)。