重写历史的能力

  Git的重写历史的能力同时存在着优势和挑战。具有挑战性的一面就是,未协调一致的使用可能会对其他用户造成潜在的影响。假定多个用户都获得了一个远程(共享)Git仓库的内容。一个用户决定执行变更修订历史的操作。对历史的变更会造成仓厍中新的内部校验和(SHA1)的变化,这一变化会从指向所做修订的任何内容开始。一旦这些更新被放回到远程端,那么需要合并这些更新的所有其他用户就不仅必须处理最新的内容,还要处理其他用户对历史所做的修订变更。最好的情况是,这可能会是一个意外。最坏的情况是这会非常消耗时间和过度占用资源,因为这样一来就需要时间和资源来纳入所有这些变更。

  高度推荐的指导原则就是,在受影响的修订被推送到远程端之前,仅应该在一个用户的本地环境中进行修改历史的变更。如果迫切需要在仓库历史已经在远程端可用之后修改其修订版本,那么可以采用一种推荐的方法:应该事先通知其他用户,并且要在对历史进行修改之前为他们提供提交其变更的机会。在变更完成之后,他们就可以在本地得到一个最新副本以便继续工作。这将允许他们避免潜在的难以合并的情形。

企业员工电脑监控软件,己所不欲勿施于人?

越来越多的公司被逼出手了:安装企业员工电脑监控软件——用来和员工博弈的主要武器。

按理说,员工应该恪尽职守,在工作期间不应处理私人事务,更不应该用公司的电脑在工作时间打游戏、聊天、网购。大道理谁都懂,但现状总归是现状,哪个老板心中没有苦水和自己的一本账呢?

如果员工仅仅是上班时间偷偷玩个游戏、看个电影倒也算了,最让老板痛恨的是那种把公司商业机密或重要文件泄露出去的员工,那种背后在各种群里搬弄是非、挑拨离间,说三道四的员工,对这样的人,一定要留下强有力的证据。

这就是为什么越来越多的公司选择安装WorkWin监控软件的原因。那么,问题来了,安装WorkWin监控真的是互相伤害吗?

是不是互相伤害,要看“你“怎么用或者怎么想。这里的“你“包括老板和员工。对于员工来说,如果知道有双眼睛时时刻刻在盯着自己的电脑屏幕,会不会有种崩溃的感觉?我记得有人抱怨说在被监控的第一天,傻傻的都不知道该干什么,突然放弃之前的各种”嗨“,只能对着百度界面思考人生良久。。。。

对于老板来说,用了监控后,自然是各种爽,这才有做老板的感觉,俺终于知道你丫每天都干了些啥——洞察秋毫,直指灵魂深处。

作为员工来说,被监控后可能会感觉被伤害了,被怀疑了。作为老板会感觉是你们逼我出手的,再不好好管管,咱这公司还能不能好好干下去。

如果员工真的是在专心工作,应该不会在意甚至忘掉正在被监控这件糟心的事,如果老板真的是用人不疑,工作安排井然有序的话,老板估计也不会没事吃饱了撑的去翻看监控记录。

没错,安装WorkWin其实是一种博弈,如何化解郁闷心结?我们要搬出古人的智慧。子贡当年问孔子,如果您只能教给我一句人生哲理,您传授我哪句话?孔子张口就来:“己所不欲,勿施于人“。看到了吗?这就是大师的境界和智慧。

所以,在安装WorkWin监控这件事情上,我们要牢记孔子教导,换位思考,症结自然就会被化解。

作为员工,要站在公司的立场上,多想想公司的难处和不满,多反思是不是自己做的不到位,要公司搞出监控这档子事情。如果自己做老板,你能允许自己的员工不受管控的每天胡折腾下去吗?

作为老板,应该以身作则,为员工做好表率,所以我强烈建议老板也应该主动接受监控,体验下是什么样的心情。一天体会不到就两天,直到领悟。你以为老板工作时间不会走神或倒腾点私货吗?没准全公司第一个提高工作效率的是老板自己。

多换位思考,这个世界就和谐了。无论“你“是爱WorkWin还是恨WorkWin,毕竟不是每个人都有”己所不欲,勿施于人“的境界,所以说存在的就是合理的,WorkWin存在了十多年了,并且在可预见的未来会继续存在下去。大笑三声,耗子尾汁。

 

访问和权限

  Git并未提供现成的一个层来设置用户或者授予访问权限和拒绝访问。对于本地环境,这没什么关系,因为所有一切都是本地的。对于共享的服务器端仓库而言,有一些选项可供选择。

  • 使用用户组和文件权限掩码这样的操作系统机制来限制用户组及其直接的仓库权限。
  • 通过客户端-服务器协议(SSH、HTTPS)来限制访问。
  • 添加一个实现了更加细粒度的权限模型和接口的外部应用程序层。

  注意,这些方法并不互相排斥。例如,在选择托管自己的共享、服务器端仓库的企业环境中,你会希望限制那些可以在系统层面直接访问磁盘上实际仓库的人,对需要将内容从本地环境放入远程仓库中的用户进行身份验证,并且可能还希望有一个能够被集中管理或由选定范围内的一支团队来管理的权限层。

远程追踪分支

  将本地环境和远程环境之间的连接用作仅在操作要求时才激活的临时连接,这是保持简单处理的一种有用构造。它也使得可以限制开销和带宽,并且支持离线开发这样的范式。

  不过,如果正在处理本地环境并且希望知道相较于远程仓库中变更的版本而言,本地变更的差异程度(状态),或者希望从远程仓库中拉取内容但暂时不合并的话,那么这就没什么用。这些类型的操作需要一些关于远程仓库状态的持久化信息(建立到远程环境物理连接的操作之间)。

  Git会通过在本地仓库中设置远程追踪分支来持久化这一关于远程仓库状态的信息。实质上,本地仓库包含与远程仓库有关的基于上一次与之交互(连接到远程仓库)的状态信息。

  这些远程分支的副本与本地仓库中的本地分支共存。正因如此,就必须使用一种方法来区分这两种分支类型,因为本地分支通常都会具有与远程分支相同的名称。例如,远程和本地仓库中都有一个master分支。

  为了有助于区分远程追踪分支与本地仓库中的本地分支,远程追踪分支具有一个与之关联的命名空间——远程引用名称,比如origin、origin2等。例如,如果指向从中克隆的该区域的远程引用被称为origin,那么本地仓库中master的远程追踪分支就将被命名为origin/master(或者更准确地说,是remotes/origin/master)。本地master分支的名称就是master。

Git如何与远程环境交互

  Git中的远程仓库都是dumb,这并不意味着这样的做法不好;相反,它们不必进行大量的处理。因此,可以认为,围绕它们的模型是智能的。

  Git不会维护从本地仓库到远程仓库的持久连接(如果这样做了并且要求这样做的话,那么无法进行离线开发)。相反,Git会在远程仓库进行签入以便得到更新后的状态信息和内容。当需要与远程仓库交互的Git命令在本地环境中被初始化的任何时候,都会发生这一签入行为——实质上,也就是进行获取、拉取或推送操作时。

  对于那些操作的必要持续期间,本地环境中的Git会建立与远程仓库的连接,收集关于与有关分支在远程仓库中位置相关的信息,并且酌情更新或下载内容。

  因此,Git可以直接通过临时连接连接到远程环境。这类似于大多数传统源管理系统的处理方式。只有在服务器和本地工作区域之间更新内容时,才会建立和使用到服务器的连接。

断开连接式开发

  Git模型提供了一个本地环境,在其中可以使用一个服务器仓库(这个服务器端仓库在Git术语中也称为远程)的本地副本开展工作。这个副本会驻留在你的工作区中。当你对干在这个本地仓库中所做的修改感到满意时,可以将本地仓库的内容同步更新到远程端。

  进行变更所需的所有源管理命令都可以在这个本地坏境中运行。在准备好同步内容之前无须访问远程仓库。由于区一特性,不必与远程仓库的连接就能进行源管理。只要针对本地副本开展工作即可。

  因为可以在不必与远程服务器端进行连接的情况下在本地环境中执行源管理任务,所以可以在断开与远程的连接,甚至断开网络的情况下开展工作。这就是断开连接式开发的含义。

  要牢记的一个重要因素就是,在同步到远程之前,所有的修改和数据都位于系统上的本地环境中,通常也就是你机器上的本地磁盘中。

创建结构

  应用程序通常需要存储一些与某一事情相关联的不同数据类型的信息,并且必须存储在一个组中,如客户的名字和地址(字符串类型)以及余额(数字类型)。一般情况下,类用于保存变量组,但这也可以使用结构来实现。

  结构与类非常相似,但更简单。在设计应用程序时,需要决定是使用结构还是类。根据经验法则,我们建议,如果需要把大量方法放到结构中,那就应该使用类。在目前的编程中,类比结构更常用。如果使用旧代码,可能会发现结构比较常用。以后将结构转换为类会比较麻烦,因为结构与类是使用不同的语法规则创建的,有时候同一语法在结构和类之间会产生不同的结果。所以要慎重选择是否使用结构。如果有疑问,就使用类。

使用多个窗体

  所有的Windows应用程序都有两种类型的窗口——普通窗口和对话框。普通窗口为应用程序提供了主要的用户界面。例如,如果使用Word,就用普通窗口来编辑文档。

  有时在访问一个特殊功能时,应用程序会显示对话框。这种类型的窗口从半路拦劫了应用程序,并强迫用户仅使用这个窗口。比如说,在Word中选择Print命令时,就会出现一个对话框,此时除非单击OK、Cancel或关闭图标来关闭该对话框,否则就不能修改文档了,而只能使用Pint对话框。这种窗体被称为模态窗体。一旦它们出现,就会进入该模式。

应用程序视图

  不管是构建Windows Forms应用程序还是Windows 8应用程序,它们都会使用不同的视图(即窗体应用程序的状态)。在Windows窗体中,状态包括Minimized、Maximized和Normal。而对于Windows8应用程序来说,视图包括Snapped、Filled、FullScreenLandscape或FullScreanPortrait。

  与常见的Windows Forms应用程序不同的是,在Windows 8应用程序中没有控制框来更改窗体的状态。为更改应用程序的视图,用户需要触摸并向左或向右拖动应用程序,以便对齐应用程序。

  Windows 8应用程序设计中的一个关键概念是填充整个屏幕区域。对于一个Snapped视图来说,其宽度是320px,此时应用程序将垂直平移。而如果应用程序位于Filled视图中,则会填充高度和宽度的100%,并且水平平移。在FullScreenLandscape和FullScreenPortrait视图中,应用程序将填充整个屏幕并进行相应的平移。

设置断点

  当调试一个大型程序时,常常只需要调试其中的一部分代码。也就是说,让代码运行到某一处然后停下来。这时就要使用断点了;它们可以让代码执行到任何定义了断点的位置停止。我们可以在代码的任何地方设置断点,代码运行到断点处就会停止运行。

  代码会在设置了断点的那行之前停止执行。

  可以在编写代码时设置断点;也可以在运行时切换到代码窗口中,在所希望的位置设置断点。当程序正在执行一段代码(如循环中的代码)时,不能设置断点。但可以在程序空闲、等待用户输入时设置断点。

  当开发环境遇到一个断点时,就会停止执行代码,应用程序将处于中断模式。此时,可以使用许多调试功能。实际上,许多调试功能也只有在程序处于中断模式时才能使用。

  在设置断点时,可以单击要设置断点的代码行旁边的灰边,或者把光标放在要设置断点的代码行上,按下F9键。设置好断点后,在灰边上会出现一个纯红色圆点,且该代码行以红色突出显示。使用完一个断点后,单击纯红色圆点就可以删除它。

  有时希望调试循环中的代码,例如从文件中读取数据的循环。我们事先知道循环在前x个记录中会顺利运行,但为了找到怀疑有问题的记录,单步执行所有的代码就非常耗时。可以在循环中设置断点,并给它设置一个执行计数器。循环中的代码会执行在执行计数器中指定的循环次数,然后停下来,进入中断模式。这样可以节约时间。也可以在断点上设置一个条件,例如在变量包含某个特定值或变量的值发生改变时。