我有一个裸存储库,用作我项目的中央存储.所有开发人员都git clone <repo>愿意与之分享.当他们进行克隆时,他们会检查主分支(除非他们这样做git clone -n)因为repo.git/HEAD包含ref: refs/heads/master,使其成为活动分支.
问题是,如何正确更改活动分支?我可以简单地直接破解repo.git/HEAD文件,但这看起来很讨厌,而且,哈哈.
我尝试git checkout <otherbranch>在repo .git目录中做,但是因为我不在工作树中而失败了.
我试过git update-ref HEAD refs/heads/otherbranch但是刚刚更新的refs/heads/master与refs/heads/otherbranch相同(好吧,我在虚拟存储库中做了那个,而不是我的生产!)
我试过git update-ref --no-deref HEAD refs/heads/otherbranch,这几乎奏效了.它更新了HEAD文件,但它将其设置为指向的提交的SHA1 refs/heads/otherbranch.
我正在使用git版本进行测试1.7.0.2.msysgit.0.
我猜测没有办法做到这一点git push,因为允许所有和各种更改你的默认分支似乎有点不安全(!),但肯定有一个更好的方法在repo .git目录中执行它比直接黑客HEAD文件.
是否有比做库得到SHA1s的原始列表中的所有对象的一种更好的方式ls .git/objects/??/\*和cat .git/objects/pack/*.idx | git show-index?
我知道,git rev-list --all但只列出.git/refs引用的提交对象,我正在寻找包括由git-hash-object,git-mktree等创建的未引用对象的所有内容.
我有一个完美的USB主机模式应用程序.我插入设备,Android弹出允许应用APPNAME访问USB设备?权限请求窗口,我选中默认情况下使用此USB设备复选框,然后点击确定,然后启动我的应用程序,它与USB设备完美通信.
但...
然后我拔下设备并将其重新插入.Android弹出允许应用APPNAME访问USB设备?对话再次.WTH?我已经告诉Android默认情况下会这样做,那为什么还要再问我一次?
冰淇淋三明治4.0.3和Jellybean 4.1都会发生这种情况.
理想情况下,我希望Android能够记住即使在我重新启动Android设备之后,我也已经授予了对这个特定USB设备的许可.
那么为什么Android不记得我已经授予了许可?
我正在运行git 1.6.4.2.垃圾收集失败说"错误:无法找到<SHA1>".
我已经设法确定丢失的对象是blob,并且我无法恢复blob文件.似乎运行"git add"和"git commit"的2个脚本同时运行并设法相互干扰,因此一个文件提交的文件比另一个版本更新,旧版本的blob消失了.
所以我现在要做的就是回滚我的存储库以取出引用引用丢失的blob的树的提交.
我知道提交所在的分支,所以我在其上运行"git reset"以回退到duff提交的父级.而且我知道分支在其他地方合并了,所以我也把那个分支倒了.据我所知,duff commit/tree/blob没有被任何东西引用.但是,如果我运行git prune --expire = now然后是git gc,那么我仍然会收到有关丢失对象的错误.
所以我的问题是:如何查询git数据库以查找包含duff blob id的每个树对象?然后我如何找出导致git prune保留它的原因?
整蛊!
谢谢凯文
我有许多远程存储库,我想合并在一起.这些存储库中的一些子树对于远程控制器是唯一的(它们包含特定于主机的数据),其他子树包含在所有远程控制器中通用的数据(应该是).
基本上,我想做的是为每个遥控器运行"git pull".这将使远程主服务器的跟踪分支上的本地主分支快速转发到远程主服务器上已更改的特定于主机的文件,并且对公共文件不执行任何操作,因为它们不会更改.
公共文件中的更改(称为F,更改为F')应该不是问题,即使它最初只发生在一个远程上.git-merge将做正确的事情并在我的复合工作区中给我一个F'的副本,这就是我想要的.如果同一个公共文件在另一个遥控器上以不同的方式改变(称之为F"),问题就出现了.git-merge将给我一个F'和F"的组合,这不是我想要的.我想要的只是F".
当我使用ClearCase时,我们将其称为复制合并.合并的结果始终是贡献者的精确副本.这听起来很像"git merge -s theirs",但它不存在.
我想知道我是否可以通过"git-read-tree -m -trivial"来做一些事情来快速合并,然后用git-merge和一个自定义合并工具来简单地复制$ REMOTE文件到$ MERGED.但即便如此,我也看不出如何从合成F'和F中停止git-merge,如果合并是微不足道的话.
我已阅读链接是否有"他们的"版本的"git merge -s ours"?在这个网站上,Junio Hamano的帖子引用了解释为什么"git merge -s theirs"是一个坏主意,但对我来说情况并非如此.我确实重视旧的历史,但我需要跳出船并在发生事件时跟踪远程站点上的更改.本地站点上没有新工作.它只需要形成所有远程站点的组合,在更改时从最后一个轮询的远程站点获取最新的"公共"文件.
在此先感谢您提供给我的任何帮助.
我想重现ls --full-timePerl脚本的输出,以避免调用ls数千次的开销.我希望使用stat函数并从那里获取所有信息.但是,ls输出中的时间戳使用高分辨率时钟,因此它也包括纳秒数(根据GNU文档,这是因为--full-time相当于--format=long --time-style=full-iso,并且完全iso时间样式包括纳秒).
我遇到了Time :: HiRes模块,该模块覆盖标准stat函数,其中一个返回atime/mtime/ctime作为浮点数,但是没有覆盖lstat.这是一个问题,因为在符号链接上调用stat会返回链接文件的信息,而不是链接本身的信息.
所以我的问题是 - 我在哪里可以找到一个版本的lstat以与Time :: HiRes :: stat相同的方式返回atime/mtime/ctime?如果失败了,是否有另一种方法可以以高分辨率获取符号链接的modtime(除了调用ls).
我正在运行基于GNU Emacs 24.3.50.2的Aquamacs 3.0a.cperl-version是6.2.当我编辑一个Perl常量块时,我得到了我不想要的额外缩进: -
use constant {
ONE => 1,
TWO => 2,
THREE => 3,
};
Run Code Online (Sandbox Code Playgroud)
我想要的是: -
use constant {
ONE => 1,
TWO => 2,
THREE => 3,
};
Run Code Online (Sandbox Code Playgroud)
问题似乎是添加了cperl-continue-statement-offset,因为我们在一个块内,并且在前一行的末尾没有分号.
有没有办法告诉cperl使用"parens"规则缩进常量块?我确实尝试过调整cperl-indent-parens-as-block,但这没有帮助.我并不感到惊讶,我想我应该寻找一个名为cperl-indent-constant-block-as-parens的变量:-)
我的应用程序想要将时间戳值插入到 mySQL 数据库中的 TIMESTAMP 变量中。时间戳值是 UTC 时间,采用通常的“YYYY-MM-DD HH:MM:SS”格式。问题是我的SQL服务器设置为使用系统时间(SELECT @@global.time_zone说SYSTEM),并且系统时区是欧洲/伦敦(服务器运行的是Ubuntu 14.04),因此mySQL进行夏令时转换并将值存储为比它应该是什么。(我想如果我在另一个时区,例如 CST,那么我会有一个不需要的时区偏移以及夏令时)。
为了让 mySQL 做正确的事情,我似乎需要在插入它之前将 UTC 时间戳转换为系统时间,以便 mySQL 可以在内部存储它之前将其从系统时间转换为 UTC 时间。这段代码达到了预期的效果:-
mysql> select timestamp("2015-05-06 12:34:56")+CURRENT_TIMESTAMP-UTC_TIMESTAMP;
Run Code Online (Sandbox Code Playgroud)
mysql> select timestamp("2015-05-06 12:34:56")+CURRENT_TIMESTAMP-UTC_TIMESTAMP;
Run Code Online (Sandbox Code Playgroud)
我现在打算这样做,但这似乎有点闲聊,那么有更好的方法吗?
[编辑]另一轮 RTFM 给了我这个想法......
mysql> select CONVERT_TZ("2015-05-06 12:34:56", "+00:00", "SYSTEM");
Run Code Online (Sandbox Code Playgroud)
+------------------------------------------------------------------+
| timestamp("2015-05-06 12:34:56")+CURRENT_TIMESTAMP-UTC_TIMESTAMP |
+------------------------------------------------------------------+
| 20150506133456.000000 |
+------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
这看起来干净很多。还有更好的想法吗?
该问题针对的是在默认InnoDB表类型为Ubuntu 10.04 LTS Server上运行的MySQL 5.5 ...
假设我有一个房屋地址表“ Address”,其中有“ number”,“ street”,“ district”,“ town”,“ county”和“ postcode”列。在这些列中,我将有许多行具有相同的值,并且将它们分别索引以进行搜索。假设我将每列实现为VARCHAR(127)并创建1000行,所有行都带有town ='London'。这是否意味着我最终在数据库中获得了字符串“ London”的1000个副本,还是MySQL做得很聪明,只将该字符串存储了一次,然后从所有1000行中引用了该副本?
我到目前为止所做的事情是通过为每个列创建单独的表来显式处理重复项,每个表都具有“ id”和“ value”列,然后在Address表中使用外键引用每个表中的唯一值表。每次插入新的“地址”行时,我都会搜索每个表,以查看号码,街道,地区等是否已经存在。如果是,则使用现有索引,如果不使用,则我在该表中插入一行并使用新索引。
显然,我的方法最大程度地减少了存储的VARCHAR字符串的数量,因为每个重复项只有一个副本。问题是,如果我只是将列声明为VARCHAR并为它们建立索引,MySQL会做同样的事情吗(或更好!)?