Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在每个文件本质上都是自己的repo的情况下,我可以使用GIT吗_Git - Fatal编程技术网

在每个文件本质上都是自己的repo的情况下,我可以使用GIT吗

在每个文件本质上都是自己的repo的情况下,我可以使用GIT吗,git,Git,注意:尽管(从已经发生的讨论中)看起来GIT实际上并不适合这个用例,但我已经向赏金者提出了这个问题,以提示更明确的答案,希望来自于对GIT有丰富经验的人。原始问题如下 我有一个情况,我有一个独立的文件大集合。所谓独立,我的意思是每个文件不依赖于它周围文件的存在、不存在或特定状态。一个很好的类比是图像目录,我们的工作流程允许独立地创建、编辑和删除每个图像,并且对图像所做的工作与目录中的其他图像无关 请注意,这种独立性不仅是偶然的,而且对我们的工作流程至关重要 这些文件中的每一个都将受益于类似GIT

注意:尽管(从已经发生的讨论中)看起来GIT实际上并不适合这个用例,但我已经向赏金者提出了这个问题,以提示更明确的答案,希望来自于对GIT有丰富经验的人。原始问题如下

我有一个情况,我有一个独立的文件大集合。所谓独立,我的意思是每个文件不依赖于它周围文件的存在、不存在或特定状态。一个很好的类比是图像目录,我们的工作流程允许独立地创建、编辑和删除每个图像,并且对图像所做的工作与目录中的其他图像无关

请注意,这种独立性不仅是偶然的,而且对我们的工作流程至关重要

这些文件中的每一个都将受益于类似GIT的工作流程。如果能够跟踪每个文件的更改,让人们在独立的分支中处理每个文件,然后在完成后合并他们的更改,那就太好了(因此,为了进行类比,假设这些是SVG图像,您可以让一位艺术家绘制图像,让一位翻译人员翻译文本内容),并访问使用GIT的其他项目中的文件

根据我的经验,当您有一组文件都处于特定状态时,GIT非常棒。例如,当您在达到“Production Release 1.2”状态后提交GIT回购时,每个文件都会在提交时共享“Production Release 1.2”状态

但我不确定如何应用GIT工作流,或者这样做是否可行,因为每个文件都不能共享周围文件的状态。您可以将每个文件放在它自己的GIT repo中,但这似乎并不实用

因此,我的问题是:

  • 我的印象是GIT只对一组相关文件有效吗
  • 如果不是,那么在文件基础上使用GIT的克隆/分支/合并功能的过程是什么
  • 更新

    作为对iberbeu的回应:我并不是将版本视为X.Y,而是将GIT提交视为假定repo中的所有文件都具有相同的版本或提交点(无论您如何定义版本)。在这种情况下,GIT repo中的文件不是完全独立的

    这里的问题是,当您使用一个包含所有独立文件的单一回购协议,将其克隆到您自己的本地回购协议中,然后开始处理分支。此时,假设所有文件都属于分支,即使从我们的工作流程的角度来看,您只处理一个文件。但是,现在所有这些独立文件都是“顺其自然”的,接受与实际要编辑的单个文件相关联的修订历史记录

    因此,Joe可能会创建一个回购调用的分支“Joe处理图像1”。他的分支有他想要制作的图片1,还有10000张他不感兴趣的图片

    Jane可能会创建同一回购协议的分支,称为“Jane处理图像987”。她的分支机构有987号图片,她想制作,还有10000张其他她不感兴趣的图片

    只要Joe和Jane不想开始编辑他们分支中的其他一些图像,这就可以了。但如果他们这样做了,我们就失去了每个图像作为独立实体进行编辑的概念模型,并与其他图像分开进行编辑

    因此,如果Joe在本应只编辑图像1的分支中编辑了图像2,并将这些更改合并回repo中,那么我们现在可以看到图像2的显式修订历史沿边图像1进行编辑。但是图1和图2应该是完全独立的。不应该有图像2的概念,因为它是与图像1一起编辑的

    所以这是问题的关键。GIT是否支持将其控制的文件视为独立实体的概念,这些实体的版本与任何其他文件都不相关?或者,这只能通过每个文件的单独git回购来实现吗

    更新2


    它看起来可能取代了成千上万的GIT回购。

    GIT可以为单个文件创建存储库


    如果您不想为每个文件创建存储库,也不需要同时查看其目录中的所有文件,您可以从一个空存储库开始,然后为每个文件创建一个分支。如果不在这些独立分支之间进行任何合并,它们将保持独立。您仍然可以根据特定文件的分支创建新的分支,并将更改合并回来。

    我真的看不出有什么问题。我认为您将存储库视为对代码(本例中为文件)进行版本控制的一种方式。虽然这是正确的,但这个想法可能会导致错误,因为这并不意味着您总是以X.Y的形式提交版本

    我的意思是,你可以把回购协议看作是一个时间表,在这个时间表中,你有一个文件夹内容的不同状态。这些文件是否相互关联并不重要

    有了git,您总是可以获得单个文件的旧版本,而不需要返回到repo的完整状态

    因此,在您的案例中,一个包含多个独立文件的回购协议和多个包含一个文件的回购协议之间没有任何区别。实际上有很大的区别,第一种选择是不可接受的,而第二种选择是不可处理的


    实际上,一个普通项目有完全独立的文件,但它们都属于同一个repo。

    您可以使用单个repo,并使用git钩子强制执行一个粒度

    客户端预提交钩子将确保提交对单个文件进行了更改,并且可选地,prepare-commit-msg钩子将自动在提交消息前面加上文件名

    服务器端预接收钩子可以执行上述操作

    你会
    #!/usr/bin/python
    
    # $Id: cvs-update-safe,v 1.1 2007-11-02 19:47:02 falk Exp $
    
    usage = """Like cvs update, but only updates files which will update cleanly.
    
    Usage:  cvs-update-safe [files...]
    """
    
    import sys
    import os
    import string
    import commands
    
    def main():
      cmd = 'cvs -n update ' + string.join(sys.argv[1:], ' ')
      output = commands.getoutput(cmd).split('\n')
      olist = []
      for line in output:
        line = line.split()
        if line[0] is 'U' and len(line) is 2:
          olist.append(line[1])
      if olist:
        cmd = 'cvs update ' + string.join(olist, ' ')
        os.system(cmd)
      else:
        print 'Nothing to update'
    
    
    
    if __name__ == "__main__":
      sys.exit(main())