Host Git Repo on my Mac for Xcode project - iphone

For work all my code must be hosted locally, which rules out using something nice like GitHub. However, I really want to be able to use XCodes Git functionality.
Is it possible to host the repository locally and have multiple computers push and pull from it? I have a server available but it runs Windows 08 so I'm not real keen to making that work

Any *nix machine that runs a SSH server can easily host a Git repo with push/pull access. All someone needs to be able to do is log in and reach the files, and they can clone and pull. Write access, and they can push. (You're going to want a bare repo if you want it to accept pushes, though. Otherwise, things get all kinds of wonky. Less error-prone would be to provide a way for people request that you pull from their repo, but that requires that each person host a Git repo. If that's not really an option, then next best would be to let everybody push to a bare repo.)
Git will also work over HTTP, and it's allegedly easy to set up Apache to host a repo. I've actually had a lot of success with SSH, though. It seems even easier to set up to me; all the server needs is an sshd, (almost certainly) Git, and appropriate user accounts.
Also note, if you don't need to share, then Git already does everything you need on its own, offline. All the above stuff only applies if you want other people to be able to pull from (and possibly push to) you.

You can run git or svn right on your machine. Just set up a local repository. Note that mac os x has unix under the hood.

Related

Version control for completely local and with restriction?

We need one of version control that can use completely local like in local network collaborators connect to one PC and clone or create branch, no code upload to the server or something like that.
All collaborators access to the repository in company via local network.
Collaborators does not access to repository out of the company.
which source control can we use?
Pretty much all version control systems support putting your central repository inside a local network instead of on the internet, including the one mentioned in your question's tag (currently: git, svn). GitLab, for instance, is a package you can install on a machine inside your local network to get a similar experience to the one on gitlab.com, only it's not accessible outside your network.
If you want to avoid having to set up something on a central machine in your network (which is pretty much a requirement if you want to clone from and push to a central place in your network), you'll be wanting to look at decentralized systems, such as Git or Mercurial. In these systems, each local checkout/clone is a fully-featured repository and others can fetch from it (provided you're letting them access it via something like SSH).
Most people are much more used to centralized workflows, so if you do have the time and inclination to set up something like GitLab, it's probably easier to explain to everyone.
Sounds like Git is a perfect fit for you.
Git homepage
You can use git as Source Control and can install gitlab on your local server. We in our company use Gitlab locally and its very convenient. Moreover, All of your requirement perfectly serve by gitLab. Can download Gitlab-Offline from
https://packages.gitlab.com/gitlab/gitlab-ce

How to set up GIT as version control tool for a small team

We are using Eclipse with a SVN client plug-in. This client needs a server running; what about Git? We need to work in a LAN environment without internet access. I have read some basic tutorials about using Git with Eclipse. If I got a Java project in my Git repository, how can I share it with my teammate?
Even though you can share your local repositories, I would suggest setting up a server. There many free alternatives like:
gitlab (http://gitlab.org)
gitorious (http://gitorious.org)
gitolite (https://github.com/sitaramc/gitolite)
gitblit (http://gitblit.com/)
But IMO the best one is Atlassian Stash which for small team will cost you only $10.
if you need to share it, you need some way to access it from each other. Bitbucket is great for small teams who need private code.
If you are always using it from inside a LAN one of you should set up a shared section which you can all push your git changes too (a shared folder or shared drive is good enough) but i would recommend using github / bitbucket if possible
from a command line (can probably use it within eclipse too)
git clone file:////192.168.1.100/code
and then you can psuh and pull from 192.168.1.100/code assuming you have write permissions there
if you're coming from subversion to git, you will be faced with the concept of local repository vs shared repository. You will be able to have a local repository on your computer where you can do as many commits as you want and then only push relevant changes to the shared repository (the one that your teammates will be able to see).
Here's an useful link on the possibilities to share a repository: http://www.jedi.be/blog/2009/05/06/8-ways-to-share-your-git-repository/ (ignore the last one, GITHUB, which will require internet access).
In your particular situation I would recommend sharing via SSH or via GIT daemon.
I also really recommend you to take a look on Eric Sink's book here. He's even offering hardcopies for free!
as suggested you can run your own instance of gitolite or gitlab, but for a rudimentary solution i suggest you just check the following answer:
https://serverfault.com/a/113688/181010
basically you can use any folder as a shared repository as long as all users can access the files either locally or via ssh. that link discribes how to tell git to create its file with rights that are appropriate for usage by all users of one unix group (instead of only the single user owning the files).

Configuring Mercurial's built-in server

I'm trying to get an install of Mercurial setup at work to evaluate it with our legacy code. The "server" I'm currently using is simply a desktop running Windows XP with SP3 on our intranet. The "client" install is on my local desktop, also running Windows XP with SP3. (I'm also using TortoiseHG on both machines.)
The web server is running at http://localhost:8000, and I can view the repository in a browser. But, when I try to detect outgoing changes to the repo, I get an HTTP 404 error. I can see the request show up in the server's log, so I'm pointing to the right location, but it shows GET http://host:8000/reponame?cmd=capabilities HTTP/1.1 404. No matter what settings I change, I can't seem to get the client to successfully execute a command against the repo. Does anyone have an idea why this wouldn't be working?
I have a similar setup, and I had similar problems.
I use the following command to run my HG serve (it's in a batch file):
hg.exe serve --prefix mercurial --address 123.12.1.1 --port 8008 --web-conf hg-web.conf --accesslog hg-access.log --errorlog hg-error.log
In the hg-web.conf I have:
[web]
style = default
allow_push = *
push_ssl = false
[paths]
my-repo = c:\hg\my-repo
With this setup, I can access my repository by accessing url http://ip:port/mercurial/my-repo
I can push without a problem.
Try this setup and I hope it helps you resolve your problem.
Well, when I start internal server in my TortoiseHG (for single repo, Repostory - Start Web-server from Workbench main menu)
Server window tells 'Running on localhost:8000', but really server listens on all interfaces (netstat -na shows TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING)
On clone-edit-commit in fork and testing outgoing (from THG directly) I see
% hg --repository Z:\clone outgoing http://10.1.14.94:8000/
comparing with http://10.1.14.94:8000/
searching for changes
changeset: 39:c57a9357ec55
tag: tip
user: I
date: Fri Mar 08 17:00:05 2013 +0600
summary: Test-change
Some times ago I also pulled|pushed from|to these Mercurial repos from my another host. Server config is trivial and all was done inside TortoiseHG settings.
My [web] section in mercurial.ini (and nothing more)
[web]
port = 8000
encoding = UTF-8
allow_archive = bz2, gz, zip
style = gitweb
(push disabled now, work in pull-only mode)
PS: TortoiseHg version 2.7.1 on Windows XP SP3
Push means to move a changeset from one repo to another. You haven't stated that you made two separate clones of the repo, then try to push from A to B. So let's assume you're confused here, and talk about that confusion: Imagine I try to push from my own repo to an hg serve instance running against my own repo. That's like trying to phone myself to tell myself something.
Secondly, if you're really trying to push from A to B, and there really are changes in A that need to get to B, then, your actual problem is probably that you haven't got the URL of the repository input correctly into your GUI tool, which is Tortoise HG, I assume. Try it again from the command line while you're learning. If you get an error post the error here: hg push http://myserver:8000
The first time I tried Mercurial, after a long history of using Subversion, I had come to think I needed a "server" component more than I actually did. In subversion the server is where commits happen. IN mercurial, commits happen locally, and when you push to the remote (perhaps central) server, then the other people on your team see your changes. This is the big difference. I asssume you're trying to push, because commits happen locally. If you're confused about the difference between a commit and a push, then I suggest you look at http://hginit.com/
As far as setting up a server, there are three fairly easy options I can recommend:
"hg serve" from the commandline, as shown by other answers. Easy, and for temporary use only. Perfect for learning.
Install Mercurial inside Apache (easier than installing Mercurial inside IIS) for a permanent web-server with full authentication and perhaps encryption. If you use hgwebdir instructions on the Mercurial wiki it should take you about an hour. If you use the pre-built solutions, it should take much less time. I used Bitnami's pre-built solutions for windows and got one up in 5 minutes recently. Bitnami makes available installers that will get python, apache, mercurial, and other stuff, all installed and working together in what they call a "stack" (bunch o stuff that already works).
Here's the really brilliant solution. Use the free private web repositories at BitBucket.org. Free for public (open source) and private (small teams and personal) use, and quite cheap for large teams. Admin effort for you? No more than logging into a website. And you're done.

Would Mercurial help me work from 2 PCs?

I currently use Perforce for source control, but want to start working on the code from 2 different PCs at the same time (desktop and laptop). The laptop would not be able to access the perforce server very often, which makes Perforce a poor choice in this setup.
Distributed source control tools like Mercurial seem better suited to the task, but I am still not clear if this would work or not. Does anyone have any experience of using Mercurial to work on 2 machines at once (eg desktop in the week, laptop in evening and weekends). Does it help, or is it still a pain the butt keeping everything in sync and knowing what is going on.
Yes, I've been doing that for the past 2 years between my work computer and home computer. You can either use Mercurial or Git, they're both quite good. I prefer Mercurial because it relies only on python which is really easy to install on Windows, Linux and Mac OS X.
Also, since it's mostly only you working on the project you won't have very many problems with conflicts.
Mercurial is perfect for this type of setup. Basically each computer has a full copy of the entire revision history, and if you need to branch or tag releases, you can do everything against your local repository. Then all you have to do is push back to your remote repository when you're finished working on one machine. The remote repository could be on a third party site (like bitbucket) or you can roll your own with SSH or file shares. Either way it's simple to set up. I recently wrote a blog post on how to get Mercurial running an HTTP-based repository under Nginx with FastCGI (Ubuntu 9.10).
Mercurial is super fast (like git) because it works against your local hard drive instead of having to hit a server for every task. The only thing you can't do without a connection is push back to your repository, so it would work nicely in your situation where the laptop has limited connectivity.
Just make sure that you pull changes down from the repository before you start your work and then push them back when you're done. Keeping the two machines in sync is pretty simple. I recommend learning the command-line tools, though, even if you plan on using TortoiseHG or some other similar client, because the command line is easier to work with in some situations.
I have no experience with mercurial, but with git. My experiences are very good. A DVCS is very appropriate for a situation like yours. Most of the actions can be done offline, so it would not be a problem when working on your laptop.
Once you have a connection again, you just synch everything back up, and you can work on your other pc.

Is version control possible on a shared host w/o shell access?

I have a client who's host doesn't allow shell access. Is there any multi-user revision control system that can work in that situation (on linux)? He's reluctant to switch hosts.
Yes, because you don't do development directly on the production server! The content of your production server is just a view of your source repository, which is kept elsewhere so that work can be done on a separate dev server. This way, a stupid mistake on the dev server won't hose your production system. If that means doing a manual checkout to transfer the files, so be it.
Not the answer you're looking for, but get a better hosting provider. Is there something special your hosting provider is doing for you that makes you want to put up with no shell access, or even not just preinstalling SVN for you? There's a ton of really good hosts for really cheap that will give you SVN already installed, and shell access.
I use Bazaar for exactly this reason. If the server supports ftp or ftps, it supports Bazaar.
http://bazaar.canonical.com/
I've been looking for the same thing, I have a no-shell-access hosting provider with no included source control and don't want to change.
Currently, I'm using git. But instead of using git push to update the remote repository, I use a script and FTP to update the server's copy.
git pull works normally from any client, if the ftp git directory is accessible over http.
git push replacement:
git update-server-info
perl ftpsync.pl -v .git ftp://ftp.example.com/gitrepo/project.git
ftpuser=user#example.com ftppasswd=*
That's using ftpsync, from the Sourceforge ftpsync page. It's an imperfect replacement for git's push, it mirrors the local repo, instead of merging it with the remote, so make sure the local repo is up to date with git pull first.
git-ftp purports to do the same thing. Github's git-ftp page. Probably works better than ftpsync, because it's designed for the purpose, but I haven't tried it.
Sure, SVN can have multiple users and multiple repositories. Depending of course on whether your host is willing to install it. If that doesn't work, maybe you'd consider hosting your version control somewhere else?
Do you mean that you want to store your version control repository on the host and then access it from multiple clients? If yes, then all modern version control systems can work like that.
I just posted this answer on a Mercurial specific question, but it applies here too. I use Mercurial and I found a guide that let me install it with only FTP/control panel access (no shell).
http://javadocs.wordpress.com/2010/04/27/set-up-mercurial-1-5-1-on-a-shared-host-simplified/