RE: Question re. git remote repository

2013-01-23 Thread Lang, David
Thanks Matt and Dave and everyone else for your feedback on this.

Ok, I've done some more reading in the Pro Git manual and I think I have an 
idea of how to get started. Could I run this by you just in case I'm missing 
anything? Currently (pre-git status) what we have is two developers both 
working in Visual Studio, occasionally on the same project (hence the need for 
git). All the VS projects exist on a server and are accessible to both 
developers via a network share. Currently, if one of us needs to work on a 
project we turn around and ask our colleague if he's currently in it...this is 
how we avoid both being in at the same time. We run VS locally on each of our 
PC's and load the VS project into Visual Studio from the network share. Easy 
enough...

So to get this all set up with git, here's what I think I have to do...

1. Download and install git for Windows on the 2 networked developer's PC's and 
the 1 networked server.

2. On the server...
a) Initialize the Visual Studio folder for a particular project as a 
git repository using 'git init'
b) Using the git rep just created (above), create a bare repository on 
the server to act as the remote/master repository using 'git clone --bare'

3. On each of the PC's...
a) Clone the remote repository from the network server using 'git 
clone' (this will automatically create 'origin' as a remote source on the PC's)

Couple of questions...

1. Anyone see any problems/issues with the above?

2. Is it sufficient to use the local protocol for transferring files? Seems 
like the most straightforward.

3. On p.84 of the guide there's a section entitled Putting the Bare Repository 
on a Server but since the first two rep's (original and bare) are already on 
the server, this is unnecessary, correct?

4. The original Visual Studio project folder essentially remains untouched, 
correct? The 'git init' and 'git clone' commands just make copies and 
references of whatever data is in the VS project folder, right?

David

 -Original Message-
 From: git-ow...@vger.kernel.org [mailto:git-ow...@vger.kernel.org] On
 
 But ultimately, there shouldn't be a question of if you have a 
 master repository but where you have the master repository, correct?
 Or in other words, it doesn't seem like you'd want to designate any 
 one developer's local repository as also being the master repository, right?

You have two options:

1.  Central model:  
a. each developer has their own private repository b. each developer uses git 
commit to commit changes into their own private repository c. in addition, you 
also have a shared master repository d. each developer uses git push to push 
their changes from their private repository to the shared master repository e. 
each developer uses git pull to pull other developers' changes from the 
shared master repository

2.  Peer-to-peer model:
a. each developer has their own private repository b. each developer uses git 
commit to commit changes into their own private repository c. each developer 
uses git pull to pull other developers' changes from other developers' 
private repositories

You can even mix these models.  Say you have a 5 member team, and 2 members are 
working on a feature together.  The 2 people working on the feature may use 
git pull to pull changes from each other's private repositories.  Then, when 
the feature is ready, one of them can use git push to push the final version 
from their private repository into the team's shared repository.

What you don't want to do is this:

Single repository, multiple developers:  just one repository, and every 
developer uses git commit to commit their changes into the same repository.

 My sense is that would defeat the purpose of the DVCS.

Not at all.  The purpose of the DVCS is to allow each developer to have their 
own private repository where they can commit changes, while still allowing 
people to share changes from one repository to another.  That's true whether 
you use the central model or the peer-to-peer model.  

The traditional VCS has just one repository, and everyone has to commit their 
changes into that one central repository.

 We have access to many servers on our
 company's network, some of which we have full rights to, so there's no 
 issue in regards to storage space.

That will work fine.

 I suppose another idea would be to have the master simply reside on 
 one of the two developers local machines, so one of us would have both 
 a local rep and the master rep and the other of us would have just a 
 local rep.

That will also work.  You could even omit the master rep. and just have each 
developer have a local repository.  Each developer could then commit changes to 
their own local repository, and pull the other developer's changes from the 
other developer's local repository (the peer-to-peer model mentioned above).

 Or is it best to
 always have the master hosted on a machine with no other local reps?

There's no 

RE: Question re. git remote repository

2013-01-18 Thread Lang, David
Hi Matt and David,

Your responses have been very helpful for this newbie...thanks very much! I 
have a good sense now of the difference btw a CVCS and a DVCS. Here are two 
more questions...

1. I now get the sense that there's quite a few options in regards to the way 
that any one group implements their origin/master/fill in your favourite 
name repository. But ultimately, there shouldn't be a question of if you 
have a master repository but where you have the master repository, correct? 
Or in other words, it doesn't seem like you'd want to designate any one 
developer's local repository as also being the master repository, right? My 
sense is that would defeat the purpose of the DVCS.

2. Assuming I'm right about question #1, our first hurdle is where to host the 
master repository. Could you provide any suggestions for a setup based on our 
VERY simple department model? I work for a small IT department with a grand 
total of TWO developers (who sit five feet apart from one another)! The reason 
we're looking at a VCS is because I was hired a few months ago and the dept 
never needed one before now. We realize that git will be overkill for what we 
need but frankly anything will be overkill for what we need, and since git 
seems to be so well regarded in the community (and free) it looks like a good 
choice.

So the question is, how would either of you recommend we set up our master 
repository? We definitely want to keep everything in house so off-site 
hosting isn't something we'd consider. We have access to many servers on our 
company's network, some of which we have full rights to, so there's no issue in 
regards to storage space. I suppose another idea would be to have the master 
simply reside on one of the two developers local machines, so one of us would 
have both a local rep and the master rep and the other of us would have just a 
local rep. This would simplify the model. What do you think? Or is it best to 
always have the master hosted on a machine with no other local reps?

David

-Original Message-
From: Matt Seitz [mailto:mse...@mhseitz.onmicrosoft.com] 
Sent: Friday, January 18, 2013 12:52 AM
To: Lang, David; David Lang
Cc: Konstantin Khomoutov; Jeff King; git@vger.kernel.org; Stephen Smith
Subject: RE: Question re. git remote repository

From: git-ow...@vger.kernel.org [git-ow...@vger.kernel.org] on behalf of Lang, 
David [david.l...@uhn.ca]

 I thought the idea was that each developer installed git locally on 
 their machines

Yes.

 and (as needed) committed their changes to the master repository which 
 resides externally to any of the local machines, such as on a network 
 server

Yes, but committing their changes to the master repository is a two step 
process:

1.  Each developer first commits their changes to their personal repository 
using the git commit command.
2.  Each developer pushes their changes from their personal repository to the 
master repository with the git push command

 (and which I'm assuming has git installed locally as well).

Maybe.

If the machine with the master repository has git installed locally, then each 
developer can push their changes to the master repository using either the git 
protocol or the ssh protocol.

If the machine with the master repository does not have git installed locally, 
then each developer can push their changes to the master repository using NFS 
or CIFS/SMB.  The git documentation refers to this method as the file 
protocol.

The other David Lang (da...@lang.hm) believes that using git push using NFS 
or CIFS/SMB may not be safe and reliable.  Based on the following article by 
the creator of git, I believe using git push over NFS or CIFS/SMB is safe and 
reliable:

http://permalink.gmane.org/gmane.comp.version-control.git/122670

The GitFaq wiki also says that using git push over NFS or CIFS/SMB is safe 
and reliable:

https://git.wiki.kernel.org/index.php/GitFaq#What_can_I_use_to_set_up_a_public_repository.3F

This e-mail may contain confidential and/or privileged information for the sole 
use of the intended recipient. 
Any review or distribution by anyone other than the person for whom it was 
originally intended is strictly prohibited. 
If you have received this e-mail in error, please contact the sender and delete 
all copies. 
Opinions, conclusions or other information contained in this e-mail may not be 
that of the organization.

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-18 Thread David Lang
What I would do is to have each developer have their own local copy that they 
are working on.


I would then find a machine that is going to be on all the time (which could be 
a developer's desktop), and create a master repository there. Note that if this 
is on a developers desktop, this needs to be a different repository (or at the 
very least a different branch) from what they use to do their work.


developers then do their work locally, and after a change has been reviewed, 
pull it into the master repository.



This can even be done if you only have one developer (although then you may just 
use branches instead of a separate repository)


The idea is that when you start working on a new feature, you create a new 
branch from the master, implement your new feature, and then (after testing) 
merge the completed feature into the master branch/repository.


If developers are working on multiple things at once, they should have multiple 
branches. This is a hard habit to get into.


The tendancy is that while you are in changing code, you see something unrelated 
that needs fixing, so you fix it and go back to what you were doing.


You should try to get into the habit of not fixing unrelated things in one 
branch (or having a separate branch you use only for trivial fixes)


The idea is that each feature branch should have one set of related changes in 
it, so that you can merge in a branch when it's ready and not end up with one 
fix being tied in to another one,


David Lang



On Fri, 18 Jan 2013, Lang, David wrote:


Hi Matt and David,

Your responses have been very helpful for this newbie...thanks very much! I 
have a good sense now of the difference btw a CVCS and a DVCS. Here are two 
more questions...

1. I now get the sense that there's quite a few options in regards to the way that any one group implements their 
origin/master/fill in your favourite name repository. But ultimately, there shouldn't be a 
question of if you have a master repository but where you have the master repository, correct? Or in 
other words, it doesn't seem like you'd want to designate any one developer's local repository as also being the master 
repository, right? My sense is that would defeat the purpose of the DVCS.

2. Assuming I'm right about question #1, our first hurdle is where to host the 
master repository. Could you provide any suggestions for a setup based on our 
VERY simple department model? I work for a small IT department with a grand 
total of TWO developers (who sit five feet apart from one another)! The reason 
we're looking at a VCS is because I was hired a few months ago and the dept 
never needed one before now. We realize that git will be overkill for what we 
need but frankly anything will be overkill for what we need, and since git 
seems to be so well regarded in the community (and free) it looks like a good 
choice.

So the question is, how would either of you recommend we set up our master repository? We 
definitely want to keep everything in house so off-site hosting isn't 
something we'd consider. We have access to many servers on our company's network, some of 
which we have full rights to, so there's no issue in regards to storage space. I suppose 
another idea would be to have the master simply reside on one of the two developers local 
machines, so one of us would have both a local rep and the master rep and the other of us 
would have just a local rep. This would simplify the model. What do you think? Or is it 
best to always have the master hosted on a machine with no other local reps?

David

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-18 Thread Junio C Hamano
David Lang da...@lang.hm writes:

 What I would do is to have each developer have their own local copy
 that they are working on.

 I would then find a machine that is going to be on all the time (which
 could be a developer's desktop), and create a master repository
 there. Note that if this is on a developers desktop, this needs to be
 a different repository ... from
 what they use to do their work.

 developers then do their work locally, and after a change has been
 reviewed, pull it into the master repository.

s/pull it into/push it into/; I think.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-18 Thread David Lang

On Fri, 18 Jan 2013, Junio C Hamano wrote:


David Lang da...@lang.hm writes:


What I would do is to have each developer have their own local copy
that they are working on.

I would then find a machine that is going to be on all the time (which
could be a developer's desktop), and create a master repository
there. Note that if this is on a developers desktop, this needs to be
a different repository ... from
what they use to do their work.

developers then do their work locally, and after a change has been
reviewed, pull it into the master repository.


s/pull it into/push it into/; I think.


fair enough, I always think in terms of pulling from feature branches into the 
main repository so that any merge conflicts get resolved. I didn't describe this 
clearly enough.


Junio, is there a really good place we should be pointing David where the 
different workflows are described and explained?


for David

After the work is completed in the feature branches, you now have the problem of 
how to combine this work in with whatever other work has taken place in the 
meantime.


One common way to do this is to pull from the feature branch into the main tree. 
If there are conflicts, git will help you identify them and resolve them (note 
that some changes will not produce conflicts that git detects, but can still 
result in non-working code)


developers can (and should) do a dry run on this if significant changes have 
happened in the master. Create a new throw-away branch of the master tree and 
merge your feature branch into that tree and see what happens. If everything 
works, you are good to go. If you have massive conflicts, it may be worth doing 
work to avoid the conflicts and then submit the result of that to the master 
(also known as upstream)


With only two developers, you can have each of them do the merge work on a 
temporary branch and then push the results upstream to the master, or you can 
have one of them 'change hats' to be the release manager and work from the point 
of view of the master to pull the changes in)


David Lang
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-18 Thread Junio C Hamano
David Lang da...@lang.hm writes:

 On Fri, 18 Jan 2013, Junio C Hamano wrote:

 David Lang da...@lang.hm writes:
 ...
 developers then do their work locally, and after a change has been
 reviewed, pull it into the master repository.

 s/pull it into/push it into/; I think.

 fair enough, I always think in terms of pulling from feature branches
 into the main repository so that any merge conflicts get resolved. I
 didn't describe this clearly enough.

If you are assuming that the main repository has a working tree
and somebody goes there, runs git pull and manually resolves
conflicts, that may be asking for trouble down the road. It may be
sufficient for two-person group as long as they coordinate among
themselves so that only one of them uses that working tree at the
main repository at a time.

But in general, it is more common to have a bare repository without
any working tree as the main repository, let a push that conflicts
fail, and have the pusher fetch from the main repository and fix
up the conflicts in his working repository before he tries to push
the cleaned-up result.  That gives the pusher a chance to re-test
the result of integration with what he did not see while he was
developing what he attempted to push.

pull and pull -rebase are two ways to do that fetch from the
'main' and fix up step.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-18 Thread Philip Oakley

From: David Lang da...@lang.hm
Sent: Friday, January 18, 2013 9:27 PM

On Fri, 18 Jan 2013, Junio C Hamano wrote:


David Lang da...@lang.hm writes:


What I would do is to have each developer have their own local copy
that they are working on.



If you have a third machine to host the bare 'master' repo that would 
provide additional security/backup to touy local machines.


[...]


Junio, is there a really good place we should be pointing David where 
the different workflows are described and explained?


`git help workflows` perhaps.

Philip 


--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-17 Thread Lang, David
Hi David,

Ok, now I'm really lost! This is definitely due to my newbie git status but 
I'll ask anyway. I'm confused by your statement ... if you try to have one 
filesystem, with multiple people running git on their machines against that 
shared filesystem, I would expect you to have all sorts of problems.

Isn't that the whole point of git, or any versioning system? I thought the idea 
was that each developer installed git locally on their machines and (as needed) 
committed their changes to the master repository which resides externally to 
any of the local machines, such as on a network server (and which I'm assuming 
has git installed locally as well).

What am I missing?

The 'other' David Lang   ;-)

-Original Message-
From: David Lang [mailto:da...@lang.hm] 
Sent: Wednesday, January 16, 2013 6:01 PM
To: Stephen Smith
Cc: Konstantin Khomoutov; Jeff King; git@vger.kernel.org; Lang, David
Subject: Re: Question re. git remote repository

On Wed, 16 Jan 2013, Stephen Smith wrote:

 Ideally we'd prefer to simply create our remote repository on a 
 drive of one of our local network servers. Is this possible?

 Yes, this is possible, but it's not advised to keep such a 
 reference repository on an exported networked drive for a number 
 of reasons (both performance and bug-free operation).

 I agree that performance is not ideal (although if you are on a fast 
 LAN, it probably would not matter much), but I do not recall any 
 specific bugs in that area. Can you elaborate?

 This one [1] for instance.  I also recall seing people having other 
 mystical problems with setups like this so I somehow developed an 
 idea than having a repository on a networked drive is asking for troubles.
 Of course, if there are happy users of such setups, I would be glad 
 to hear as my precautions might well be unfounded for the recent 
 versions of Git.

 1. http://code.google.com/p/msysgit/issues/detail?id=130

 A group I was with used a master repository on a windows share for quite some 
 time without a database corruption being seen.   --

I think the risk is that if you have multiple people doing actions on the 
shared filesystem you can run into trouble.

As long as only one copy of git is ever running against the repository, I don't 
see any reason for there to be a problem.

But if you try to have one filesystem, with multiple people running git on 
their machines against that shared filesystem, I would expect you to have all 
sorts of problems.

David Lang

This e-mail may contain confidential and/or privileged information for the sole 
use of the intended recipient. 
Any review or distribution by anyone other than the person for whom it was 
originally intended is strictly prohibited. 
If you have received this e-mail in error, please contact the sender and delete 
all copies. 
Opinions, conclusions or other information contained in this e-mail may not be 
that of the organization.

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-17 Thread David Lang
distributed version control systems let each developer have a full repository 
locally on their machine, they then can send updates to other people who have a 
repository (or a pull request which asks the other person to pull from the 
developers repository to the other persons repository)


Most projects have one repository that they designate as being the 'main' 
repository for the project, and developers push updates to it (or send pull 
requests to the people who own that repository)


The communication between developers is typically via e-mail and the repository 
updates are sent via the git-daemon and the git network protocol.




This sort of thing is very different from the model where there is one 
repository on a shared disk somewhere and everyone accesses that shared disk to 
do their work or apply updates via NFS/CIFS protocols.


Does this clarify the difference?

David Lang

On Thu, 17 Jan 2013, Lang, David wrote:


Hi David,

Ok, now I'm really lost! This is definitely due to my newbie git status but 
I'll ask anyway. I'm confused by your statement ... if you try to have one 
filesystem, with multiple people running git on their machines against that 
shared filesystem, I would expect you to have all sorts of problems.


Isn't that the whole point of git, or any versioning system? I thought the 
idea was that each developer installed git locally on their machines and (as 
needed) committed their changes to the master repository which resides 
externally to any of the local machines, such as on a network server (and 
which I'm assuming has git installed locally as well).


What am I missing?

The 'other' David Lang   ;-)

-Original Message-
From: David Lang [mailto:da...@lang.hm]
Sent: Wednesday, January 16, 2013 6:01 PM
To: Stephen Smith
Cc: Konstantin Khomoutov; Jeff King; git@vger.kernel.org; Lang, David
Subject: Re: Question re. git remote repository

On Wed, 16 Jan 2013, Stephen Smith wrote:


Ideally we'd prefer to simply create our remote repository on a
drive of one of our local network servers. Is this possible?


Yes, this is possible, but it's not advised to keep such a
reference repository on an exported networked drive for a number
of reasons (both performance and bug-free operation).


I agree that performance is not ideal (although if you are on a fast
LAN, it probably would not matter much), but I do not recall any
specific bugs in that area. Can you elaborate?


This one [1] for instance.  I also recall seing people having other
mystical problems with setups like this so I somehow developed an
idea than having a repository on a networked drive is asking for troubles.
Of course, if there are happy users of such setups, I would be glad
to hear as my precautions might well be unfounded for the recent
versions of Git.

1. http://code.google.com/p/msysgit/issues/detail?id=130


A group I was with used a master repository on a windows share for quite some 
time without a database corruption being seen.   --


I think the risk is that if you have multiple people doing actions on the 
shared filesystem you can run into trouble.

As long as only one copy of git is ever running against the repository, I don't 
see any reason for there to be a problem.

But if you try to have one filesystem, with multiple people running git on 
their machines against that shared filesystem, I would expect you to have all 
sorts of problems.

David Lang

This e-mail may contain confidential and/or privileged information for the sole 
use of the intended recipient.
Any review or distribution by anyone other than the person for whom it was 
originally intended is strictly prohibited.
If you have received this e-mail in error, please contact the sender and delete 
all copies.
Opinions, conclusions or other information contained in this e-mail may not be 
that of the organization.



--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-17 Thread Jeff King
On Wed, Jan 16, 2013 at 03:00:41PM -0800, David Lang wrote:

 This one [1] for instance.  I also recall seing people having other
 mystical problems with setups like this so I somehow developed an idea
 than having a repository on a networked drive is asking for troubles.
 Of course, if there are happy users of such setups, I would be glad to
 hear as my precautions might well be unfounded for the recent versions
 of Git.
 
 1. http://code.google.com/p/msysgit/issues/detail?id=130
 
 A group I was with used a master repository on a windows share for quite 
 some time without a database corruption being seen.   --
 
 I think the risk is that if you have multiple people doing actions on
 the shared filesystem you can run into trouble.
 
 As long as only one copy of git is ever running against the
 repository, I don't see any reason for there to be a problem.

That should not be an issue. Git on a server has to deal with multiple
independent receive-pack's running to accept several simultaneous
pushes. They coordinate through the use of file locks. Having multiple
machines pushing over a shared filesystem should work the same, as long
as the filesystem support atomic creation of files with O_EXCL.

There may be other subtle issues lurking (e.g., the Windows issue that
Konstantin mentioned), but as far as I know, it _should_ work in
general.

-Peff
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-17 Thread Matt Seitz
From: git-ow...@vger.kernel.org [git-ow...@vger.kernel.org] on behalf of Lang, 
David [david.l...@uhn.ca]

 I thought the idea was that each developer installed git locally on their 
 machines 

Yes.

 and (as needed) committed their changes to the master repository which 
 resides externally to any of the local machines, such as on a network 
 server 

Yes, but committing their changes to the master repository is a two step 
process:

1.  Each developer first commits their changes to their personal repository 
using the git commit command.
2.  Each developer pushes their changes from their personal repository to the 
master repository with the git push command

 (and which I'm assuming has git installed locally as well).

Maybe.

If the machine with the master repository has git installed locally, then each 
developer can push their changes to the master repository using either the git 
protocol or the ssh protocol.

If the machine with the master repository does not have git installed locally, 
then each developer can push their changes to the master repository using NFS 
or CIFS/SMB.  The git documentation refers to this method as the file 
protocol.

The other David Lang (da...@lang.hm) believes that using git push using NFS 
or CIFS/SMB may not be safe and reliable.  Based on the following article by 
the creator of git, I believe using git push over NFS or CIFS/SMB is safe and 
reliable:

http://permalink.gmane.org/gmane.comp.version-control.git/122670

The GitFaq wiki also says that using git push over NFS or CIFS/SMB is safe 
and reliable:

https://git.wiki.kernel.org/index.php/GitFaq#What_can_I_use_to_set_up_a_public_repository.3F
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-17 Thread David Lang

On Fri, 18 Jan 2013, Matt Seitz wrote:


From: git-ow...@vger.kernel.org [git-ow...@vger.kernel.org] on behalf of Lang, 
David [david.l...@uhn.ca]

The other David Lang (da...@lang.hm) believes that using git push using NFS or CIFS/SMB 
may not be safe and reliable.  Based on the following article by the creator of git, I believe 
using git push over NFS or CIFS/SMB is safe and reliable:

http://permalink.gmane.org/gmane.comp.version-control.git/122670

The GitFaq wiki also says that using git push over NFS or CIFS/SMB is safe 
and reliable:

https://git.wiki.kernel.org/index.php/GitFaq#What_can_I_use_to_set_up_a_public_repository.3F


I'm glad to learn that git is more robust than I feared.

David Lang
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-16 Thread Konstantin Khomoutov
On Wed, 16 Jan 2013 17:49:09 +
Lang, David david.l...@uhn.ca wrote:

 We're just in the process of investigating a versioning tool and are
 very interesting in git. We have one question we're hoping someone
 can answer. In regards to the repositories, I think I understand
 correctly that each developer will have a local repository that they
 will work from, and that there will also be a remote repository
 (origin) that will hold the original version of the project.

The name origin is purely arbitrary: any local repository might have

 It appears from the limited reading I've done that the remote
 repository must be hosted at github.com. Is this the case?
Of course not.  github is just a Git hosting provider.  There are
plenty of them -- both commercial and not-for-profit (a well-known
service bitbucket.org is one example).

 Ideally we'd prefer to simply create our remote repository on a drive
 of one of our local network servers. Is this possible?

Yes, this is possible, but it's not advised to keep such a reference
repository on an exported networked drive for a number of reasons (both
performance and bug-free operation).

Instead, the canonical way to host reference repositories is to make
them accessible via SSH or via HTTP[S].  To do this, a server running
some POSIX OS (Linux- or *BSD-based) is the best bet.  Both kinds of
access require Git itself installed on the server.  Obviously, SSH
access requires an SSH server software (such as OpenSSH) as well and
HTTP[S] access requires a web server (such as Apache).  Of course,
everything mentioned is available on any sensible OS you might install
on your server.  Read-only access might be provided by a special tool
named Git daemon which is a part of Git.

If you have more than a couple of developers you might want to install
certain front-end Git software on the server which provides for
virtualized Git users and fine-grained control over who can do what.
Using gitolite [3] for this is the current trend.

Web-browsing for your repositories, if needed, is usually provided by
the tool named gitweb [4].

Everything I've just summarised is well explained in [5] and [6] (as an
addendum).

Another approach is to set up a turn-key solution such as GitLab [1]
or gitblit [2].

1. http://gitlabhq.com/
2. http://gitblit.com/
3. https://github.com/sitaramc/gitolite
4. https://git.wiki.kernel.org/index.php/Gitweb
5. http://git-scm.com/book/en/Git-on-the-Server
6. http://git-scm.com/2010/03/04/smart-http.html
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-16 Thread Jeff King
On Wed, Jan 16, 2013 at 10:06:15PM +0400, Konstantin Khomoutov wrote:

  In regards to the repositories, I think I understand correctly that
  each developer will have a local repository that they will work
  from, and that there will also be a remote repository (origin) that
  will hold the original version of the project.

Note that this is just one common topology for setting up repos (and it
is probably the simplest). Others are described here:

  http://git-scm.com/book/en/Distributed-Git-Distributed-Workflows

  Ideally we'd prefer to simply create our remote repository on a drive
  of one of our local network servers. Is this possible?
 
 Yes, this is possible, but it's not advised to keep such a reference
 repository on an exported networked drive for a number of reasons (both
 performance and bug-free operation).

I agree that performance is not ideal (although if you are on a fast
LAN, it probably would not matter much), but I do not recall any
specific bugs in that area. Can you elaborate?

-Peff
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-16 Thread Konstantin Khomoutov
On Wed, 16 Jan 2013 10:21:56 -0800
Jeff King p...@peff.net wrote:

Thanks for elaborating on the origin -- I intended to write up on its
special status but got distracted and sent my message missing that
bit ;-)

[...]
   Ideally we'd prefer to simply create our remote repository on a
   drive of one of our local network servers. Is this possible?
  
  Yes, this is possible, but it's not advised to keep such a
  reference repository on an exported networked drive for a number
  of reasons (both performance and bug-free operation).
 
 I agree that performance is not ideal (although if you are on a fast
 LAN, it probably would not matter much), but I do not recall any
 specific bugs in that area. Can you elaborate?

This one [1] for instance.  I also recall seing people having other
mystical problems with setups like this so I somehow developed an idea
than having a repository on a networked drive is asking for troubles.
Of course, if there are happy users of such setups, I would be glad to
hear as my precautions might well be unfounded for the recent versions
of Git.

1. http://code.google.com/p/msysgit/issues/detail?id=130
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-16 Thread David Lang
Hi David, now we are going to have some confusion here, two David Langs on the 
list :-)


On Wed, 16 Jan 2013, Lang, David wrote:

We're just in the process of investigating a versioning tool and are very 
interesting in git. We have one question we're hoping someone can answer. In 
regards to the repositories, I think I understand correctly that each 
developer will have a local repository that they will work from, and that 
there will also be a remote repository (origin) that will hold the original 
version of the project.


It appears from the limited reading I've done that the remote repository must 
be hosted at github.com. Is this the case? Ideally we'd prefer to simply 
create our remote repository on a drive of one of our local network servers. 
Is this possible?


Git is peer-to-peer, the 'origin' is just the default to pull from. It can be 
hosted on any machine that you have access to.


A typical case is that you designate one person (or a small group of people) 
to oversee your master repository, and that person decides when and what to pull 
there from the developers.


This gives you a chance to insert code review, tests, etc between what the 
developers produce in their local repository and what you then bless as the 
authoritative 'released' version of the code.


However, this master repository is just a matter of convention, it is possible 
to use any repository as the 'origin', changing it is just a config change away.


David Lang
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-16 Thread Matt Seitz (matseitz)
Konstantin Khomoutov kostix+...@007spb.ru wrote in message 
news:20130116233744.7d0775eaec98ce154a9de...@domain007.com...
 On Wed, 16 Jan 2013 10:21:56 -0800
 Jeff King p...@peff.net wrote:
  
  I agree that performance is not ideal (although if you are on a fast
  LAN, it probably would not matter much), but I do not recall any
  specific bugs in that area. Can you elaborate?
 
 Of course, if there are happy users of such setups, I would be glad to
 hear as my precautions might well be unfounded for the recent versions
 of Git.

I'm a happy user of git on network file systems (NFS and CIFS/SMB), although 
not a heavy user.

 1. http://code.google.com/p/msysgit/issues/detail?id=130

I wouldn't be surprised if there are some subtle POSIX-Win32 compatibility 
issues here between msysgit and Samba (POSIX GIT, ported to use Win32 file 
system functions, sending those Win32 requests to a Samba server, and the Samba 
server translating those Win32 requests back into POSIX functions).

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-16 Thread Stephen Smith

 Ideally we'd prefer to simply create our remote repository on a
 drive of one of our local network servers. Is this possible?
 
 Yes, this is possible, but it's not advised to keep such a
 reference repository on an exported networked drive for a number
 of reasons (both performance and bug-free operation).
 
 I agree that performance is not ideal (although if you are on a fast
 LAN, it probably would not matter much), but I do not recall any
 specific bugs in that area. Can you elaborate?
 
 This one [1] for instance.  I also recall seing people having other
 mystical problems with setups like this so I somehow developed an idea
 than having a repository on a networked drive is asking for troubles.
 Of course, if there are happy users of such setups, I would be glad to
 hear as my precautions might well be unfounded for the recent versions
 of Git.
 
 1. http://code.google.com/p/msysgit/issues/detail?id=130

A group I was with used a master repository on a windows share for quite some 
time without a database corruption being seen.   --
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-16 Thread David Lang

On Wed, 16 Jan 2013, Stephen Smith wrote:


Ideally we'd prefer to simply create our remote repository on a
drive of one of our local network servers. Is this possible?


Yes, this is possible, but it's not advised to keep such a
reference repository on an exported networked drive for a number
of reasons (both performance and bug-free operation).


I agree that performance is not ideal (although if you are on a fast
LAN, it probably would not matter much), but I do not recall any
specific bugs in that area. Can you elaborate?


This one [1] for instance.  I also recall seing people having other
mystical problems with setups like this so I somehow developed an idea
than having a repository on a networked drive is asking for troubles.
Of course, if there are happy users of such setups, I would be glad to
hear as my precautions might well be unfounded for the recent versions
of Git.

1. http://code.google.com/p/msysgit/issues/detail?id=130


A group I was with used a master repository on a windows share for quite some 
time without a database corruption being seen.   --


I think the risk is that if you have multiple people doing actions on the shared 
filesystem you can run into trouble.


As long as only one copy of git is ever running against the repository, I don't 
see any reason for there to be a problem.


But if you try to have one filesystem, with multiple people running git on their 
machines against that shared filesystem, I would expect you to have all sorts of 
problems.


David Lang
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-16 Thread Matt Seitz (matseitz)
David Lang da...@lang.hm wrote in message 
news:alpine.deb.2.02.1301161459060.21...@nftneq.ynat.uz...
 But if you try to have one filesystem, with multiple people running git on 
 their 
 machines against that shared filesystem, I would expect you to have all sorts 
 of 
 problems.

What leads you to think you will have problems?

Why would there be more of a problem on a network file system as opposed to 
local file system that can be accessed by multiple users?

Linus seemed to think it should work:

http://permalink.gmane.org/gmane.comp.version-control.git/122670

And git init specifically has a shared option:

--shared[=(false|true|umask|group|all|world|everybody|0xxx)] 
Specify that the git repository is to be shared amongst several users. This 
allows users belonging to the same group to push into that repository. When 
specified, the config variable core.sharedRepository is set so that files and 
directories under $GIT_DIR are created with the requested permissions. When not 
specified, git will use permissions reported by umask(2). 


--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-16 Thread David Lang

On Wed, 16 Jan 2013, Matt Seitz (matseitz) wrote:


David Lang da...@lang.hm wrote in message 
news:alpine.deb.2.02.1301161459060.21...@nftneq.ynat.uz...

But if you try to have one filesystem, with multiple people running git on their
machines against that shared filesystem, I would expect you to have all sorts of
problems.


What leads you to think you will have problems?

Why would there be more of a problem on a network file system as opposed to 
local file system that can be accessed by multiple users?


There are safety checks and synchronization primitives that work between 
mulitiple users on one machine (where you can see what other processes are 
running for example) that don't work with separate machines using a filesystem



Linus seemed to think it should work:

http://permalink.gmane.org/gmane.comp.version-control.git/122670


well, he knows git better than I do, but using git over NFS/CIFS is not the same 
as saying that you have multiple users on different systems making changes.


In the link you point at, he says that you can have problems with some types of 
actions. He points out things like git prune, but I would also say that there 
are probably race conditions if you have two git processes that try to change 
the HEAD to different things at the same time.



And git init specifically has a shared option:

--shared[=(false|true|umask|group|all|world|everybody|0xxx)]

Specify that the git repository is to be shared amongst several users. This 
allows users belonging to the same group to push into that repository. When 
specified, the config variable core.sharedRepository is set so that files 
and directories under $GIT_DIR are created with the requested permissions. 
When not specified, git will use permissions reported by umask(2).




I think this is dealing with multiple users _reading_ a repository, not making 
updates to it at the same time.


David Lang
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-16 Thread Matt Seitz (matseitz)
 From: David Lang [mailto:da...@lang.hm]
 
 On Wed, 16 Jan 2013, Matt Seitz (matseitz) wrote:
 
  Linus seemed to think it should work:
 
  http://permalink.gmane.org/gmane.comp.version-control.git/122670
 
 In the link you point at, he says that you can have problems with some
 types of
 actions. He points out things like git prune, 

Linus wrote:

You do need to be a bit careful if you do maintenance operations 
concurrently (I would suggest avoiding doing concurrent git gc --prune, 
for example), but any normal git workflow should be fine.

 but I would also say that there
 are probably race conditions if you have two git processes that try to
 change the HEAD to different things at the same time.

What makes you think there are race conditions?

Linus wrote:

And git doesn't have proper locking, because it doesn't need it for 
database ops: git objects are stable. For refs, git should be using the 
proper NFS-safe create and atomic rename ops.

  And git init specifically has a shared option:
 
  --shared[=(false|true|umask|group|all|world|everybody|0xxx)]
 
 I think this is dealing with multiple users _reading_ a repository, not
 making
 updates to it at the same time.

The description of shared says This allows users belonging to the same group 
to push into that repository.  The push command is about making updates.


--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-16 Thread David Lang

On Thu, 17 Jan 2013, Matt Seitz (matseitz) wrote:


From: David Lang [mailto:da...@lang.hm]

On Wed, 16 Jan 2013, Matt Seitz (matseitz) wrote:


Linus seemed to think it should work:

http://permalink.gmane.org/gmane.comp.version-control.git/122670


In the link you point at, he says that you can have problems with some
types of
actions. He points out things like git prune,


Linus wrote:

You do need to be a bit careful if you do maintenance operations
concurrently (I would suggest avoiding doing concurrent git gc --prune,
for example), but any normal git workflow should be fine.


but I would also say that there
are probably race conditions if you have two git processes that try to
change the HEAD to different things at the same time.


What makes you think there are race conditions?

Linus wrote:

And git doesn't have proper locking, because it doesn't need it for
database ops: git objects are stable. For refs, git should be using the
proper NFS-safe create and atomic rename ops.


As Linus points out, objects are stable, so when you create objects you don't 
have to worry about locking, if two things write an object at the same time, the 
same contents are being written so races don't matter.


However, if you have two people doing a commit or merge, you will get different 
results based on the order they are happening in. This seems to be exactly the 
type of thing that falls into the 'maintinance operations' category.


Linus says that git does not have proper locking, so think about it, what do 
you think will happen if person A does git add a/b; git commit and person B does 
git add c/d; git commit?


Since the tree will look different depending on what order these four commands 
execute in, the resulting HEAD could have multiple different values depending on 
the order. The individual commits may even be different.


David Lang


And git init specifically has a shared option:

--shared[=(false|true|umask|group|all|world|everybody|0xxx)]


I think this is dealing with multiple users _reading_ a repository, not
making
updates to it at the same time.


The description of shared says This allows users belonging to the same 
group to push into that repository.  The push command is about making 
updates.

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-16 Thread Matt Seitz (matseitz)
 From: David Lang [mailto:da...@lang.hm]
 
 Linus says that git does not have proper locking, so think about it,
 what do
 you think will happen if person A does git add a/b; git commit and person
 B does
 git add c/d; git commit?

Sorry, I wasn't clear. My assumption is that a shared repository on a network 
file system will either be: 

1. a bare repository that is normally accessed only by git push and git 
pull (or git fetch), the central repository model.

2. a repository where only one user does git add and git commit, while 
other users will do git pull, the peer-to-peer model (you pull changes from 
me, I pull changes from you).

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-16 Thread David Lang

On Thu, 17 Jan 2013, Matt Seitz (matseitz) wrote:


From: David Lang [mailto:da...@lang.hm]

Linus says that git does not have proper locking, so think about it,
what do
you think will happen if person A does git add a/b; git commit and person
B does
git add c/d; git commit?


Sorry, I wasn't clear. My assumption is that a shared repository on a network 
file system will either be:

1. a bare repository that is normally accessed only by git push and git pull (or 
git fetch), the central repository model.


pulling from it would not be a problem, I could see issues with multiple pushes 
taking place (the underlying repository would not get corrupted, but you will 
very quickly hit conflicts where the push is not a fast forward and you need to 
merge, not just push)


2. a repository where only one user does git add and git commit, while 
other users will do git pull, the peer-to-peer model (you pull changes from 
me, I pull changes from you).


At this point only one system is writing to the repository and it doesn't matter 
that it's on network storage vs local storage.


pulling from a shared repository is probably safe, but I wouldn't bet against 
there being any conditions where a pull at the same time someone is doing an 
update being able to cause problems.


The normal thing is to do the pulls through git-daemon, and that does make sure 
that what you are pulling is consistant.


David Lang
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-16 Thread Matt Seitz (matseitz)
 From: David Lang [mailto:da...@lang.hm]
 
 On Thu, 17 Jan 2013, Matt Seitz (matseitz) wrote:
 
  1. a bare repository that is normally accessed only by git push and
  git pull (or git fetch), the central repository model.
 
 pulling from it would not be a problem, I could see issues with multiple
 pushes taking place (the underlying repository would not get corrupted, but 
 you
 will very quickly hit conflicts where the push is not a fast forward and you
 need to merge, not just push)

How is that different on a network file system, as opposed to using http, ssh, 
or git-daemon?  Don't you get a not a fast-forward error, regardless of the 
protocol?

  2. a repository where only one user does git add and git commit,
 while
  other users will do git pull, the peer-to-peer model (you pull changes
 from
  me, I pull changes from you).
 
 
 pulling from a shared repository is probably safe, but I wouldn't bet
 against
 there being any conditions where a pull at the same time someone is doing
 an
 update being able to cause problems.

Why do you think there would be a problem?

 The normal thing is to do the pulls through git-daemon, and that does make
 sure
 that what you are pulling is consistant.

What does git pull via git-daemon do to ensure consistency that is different 
from git pull on a network file system?



--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Question re. git remote repository

2013-01-16 Thread David Lang

On Thu, 17 Jan 2013, Matt Seitz (matseitz) wrote:


From: David Lang [mailto:da...@lang.hm]

On Thu, 17 Jan 2013, Matt Seitz (matseitz) wrote:


1. a bare repository that is normally accessed only by git push and
git pull (or git fetch), the central repository model.


pulling from it would not be a problem, I could see issues with multiple
pushes taking place (the underlying repository would not get corrupted, but you
will very quickly hit conflicts where the push is not a fast forward and you
need to merge, not just push)


How is that different on a network file system, as opposed to using http, ssh, or 
git-daemon?  Don't you get a not a fast-forward error, regardless of the 
protocol?


true.


2. a repository where only one user does git add and git commit,

while

other users will do git pull, the peer-to-peer model (you pull changes

from

me, I pull changes from you).



pulling from a shared repository is probably safe, but I wouldn't bet
against
there being any conditions where a pull at the same time someone is doing
an
update being able to cause problems.


Why do you think there would be a problem?


The normal thing is to do the pulls through git-daemon, and that does make
sure
that what you are pulling is consistant.


What does git pull via git-daemon do to ensure consistency that is different from 
git pull on a network file system?


git pull via the daemon looks at what tree items you have on each end, and then 
it sends you the items needed to make you match the server. If there are partial 
updates on the server (due to some update in process) the daemon should not see 
that, but if you are grabbing the files directly, I would be less confident that 
you are always safe.


you may _be_ safe, and if others who really know the internals speak up, take 
their word on it. But, absent assurances that we know that everything is done in 
the right order in the face of a networked filesystem (which may break 
visibility of changes due to caching), I would not trust such raw access for 
updates at all, and only somewhat trust it for read-only use.


David Lang
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question re. git remote repository

2013-01-16 Thread Matt Seitz
David Lang da...@lang.hm wrote in message 
news:alpine.deb.2.02.1301161843390.21...@nftneq.ynat.uz...
 
  On Thu, 17 Jan 2013, Matt Seitz (matseitz) wrote:
 
  2. a repository where only one user does git add and git commit,
  while other users will do git pull, the peer-to-peer model (you pull 
  changes
  from me, I pull changes from you).
 
 
 you may _be_ safe, and if others who really know the internals speak up, take 
 their word on it. 

Well, we already have Linus's article.  I guess the question is whether the use 
case I describe above falls under:

A. maintenance operations

B. normal git workflow

Personally, I would consider this use case to be a normal git workflow.


--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html