On Tue, 2 Aug 2011 11:35:30 -0700 (PDT) Redeux <redeu...@gmail.com> wrote:
> Hello, i have Problems understanding the basic idea behind DVCS. > > In CVCS you commit into central repository, which is up-to-date. > > In DVCS you use a local repository for commit. If other developers > want to use your data, they have to pull the data from your repository > or from a central repository. > I have problems understanding the advantage, because if you want to > have the actual data, it produces extra work. > They have to pull data from every developer whos data they are using > or every developer has to push into central repository (that means > they have to commit AND push). > > For example, A, B and C are working together on a software project. If > A wants to have the actual data, he has to pull the data from B and C. > And if they use central repository B and C have to push into central > repository (after every commit to guarantee that the central > repository is up to date) and A has to pull the data from central > repository. > > Using a CVCS results in simple committing and update? > > Am I right or is there anything i misunderstood? While Thomas already cleared up some of the points, I'd like to add. First, the word "distributed" routinely provides certain misconseption among people first looking at the thing because they tend to imply you're somehow forced to go distributed. This is simply not true: if your team of N people uses a DVCS for development, this does not mean everyone in the team has to set up N-1 links with the other members of the team--you can happily use a centralized "reference" repository everyone pushes to and effectively have a "star" linking scheme as with CVCS. In reality, the "distributed" term refers to a neat property of these systems: instead of using abstract "versioning" on files or whole repositories (cf. CVS and SVN) they use the concept of unique identifiers on commits (snapshots of the whole repository state) and objects these commits refer to. This allows minimal selective transfers of required lines of development from one repository to another. To understand the idea, it's best to start from reading "The Git Parable" [1] which explains this in the simplest way possible. Second, while DVCSes indeed differentiate between committing and pushing your changes, there are two points to be made: 1) That way of operation is not necessarily cast in stone. For instance, cool little Fossil [2] by default works in the so-called "autosync" mode, in which before each commit, an attempt to fetch is performed to see if our leaf diverged from its "remote" version, and after each commit an automatic push is performed. So it basically works no different from Subversion. This can be turned on or off anytime. Git, to my knowledge does not have built-in support for such kind of thing but I suspect it either can be emulated or at least some working policy could be adopted. 2) I think the fear of needing to manually push what has been committed is mostly rooted in the CVCS-incurred mindset in which you do lumpy gross commits implementing big changes--simply because it's hard to do it another way. In Git, you have tools to make small, atomic, incremental commits, implementing changes which are small, localized in space and/or thought process. Hence, when in a CVCS you would have one big commit, in Git that same changeset would consist of several commits. Suddenly, separation between committing and pushing starts to make sense: you're pushing *series* of changes implementing features (or fixing bugs or whatever), not mere commits. This makes even more sense after your read about history re-writing which allows you to first hack a series of not so beautiful commits and then transform it to something more digestible by peer reviewers and then push this prettified series throwing away the original one. 1. http://tom.preston-werner.com/2009/05/19/the-git-parable.html 2. http://www.fossil-scm.org -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To post to this group, send email to git-users@googlegroups.com. To unsubscribe from this group, send email to git-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/git-users?hl=en.