Re: updating only changed files source directory?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 24 Oct 2006, Han-Wen Nienhuys wrote:

> 
> Hello there,
> 
> I'm just starting out with GIT.  Initially, I want to use experiment with
> integrating it into our binary builder structure for LilyPond.
> 
> The binary builder roughly does this:
> 
>  1. get source code updates from a server to a single, local
>     repository. This is currently a git repository that is that
>     tracks our CVS server.
> 
>  2. copy latest commit from a branch to separate source directory.
>     This copy should only update files that changed.
> 
>  3. Incrementally compile from that source directory

The terminology in the git world is, I think, a little different from what 
you expect. We call the thing that contains all of the tracked information 
(what you're calling the repository) the "object database"; what we call 
the "repository" is a bit different: it primarily keeps track of the heads 
of branches, in addition to either containing an object database or 
referencing an external one. So you need a repository for each source 
directory (because it keeps track of what commit is currently in the 
source directory), but it doesn't need to have its own complete object 
database, which is what you're trying to share between all of them.

You have a single repository with no source directory that contains the 
database and the heads according to the upstream source, and then each 
source directory has a repository that contains the head as far as you've 
built it in that directory. You fetch into the single bare repository 
from upstream, and then pull into each source directory from the bare 
repository; this will do the minimal update to the contents of the source 
directory automatically.

I think that you want to request a few git features:

 - support having a bare repository not on a branch, so that it can fetch 
   all heads from its upstream. You're not doing anything branch-specific 
   in the bare repository anyway, but git currently wants a valid HEAD to
   accept a path as containing a git repository

 - support getting an origin remote configuration with a bare repository

 - support cloning a branch of a repository, such that the clone's 
   "origin" is the upstream's chosen branch, not its "master".

 - support cloning without generating a "master" branch in the clone, and 
   instead starting on "origin"

Then you do:

git clone --bare --no-head --with-origin <upstream> REPOSITORY.git

for each branch:

  git clone --shared --branch=<branch> --no-master REPOSITORY.git <branch>

When you want to update:

GIT_DIR=REPOSITORY.git git fetch

for each branch:

 (cd <branch>; git pull; make)

Note that all of the features you need are in "clone" for setting things 
up nicely automatically; if you arrange everything by hand just right, you 
can already to the updating procedure I give.

	-Daniel
*This .sig left intentionally blank*
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]