Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Capistrano uploads the .git directory

I am using git with capistrano.

I initialized my project inside my folder on my local machine as such:

git init

I then pushed the project the server directory I then called cap deploy The deploy works, except that it uploads the local .git folder structure, as well as my .gitignore and Capfile to a publicly accessible folder.

Here's my gitignore file:

.DS_Store
uploads/**/*
Capfile
.gitignore
.git/**/*

This doesn't seem to do the trick. Any help?

Thanks!


Edit: updated .gitignore file:

Changed deployment strategy to export:

set :deploy_via, :export

This works for ignoring the .git folder, but the contents of my .gitignore file seen below are still not taken into account

.DS_Store
includes/php/config.php
/uploads
Capfile
.git





EDIT 2 (Solution): Edit 1 in combination with the following did the trick. Files that were already added prior to being listed in the .gitignore file would constantly be uploaded. Say I had the following .gitignore file.

.DS_Store
includes/php/config.php

Then I ran the following commands:

git add .
git commit -a -m 'some commit'

Then I decided to add to my .gitignore file so it now looks like this:

.DS_Store
includes/php/config.php
Capfile

Then again, I ran:

git add .
git commit -a -m 'another commit'

Now I'd see that .DS_Store and includes/php/config.php have not been uploaded, but that the Capfile has... This is what happened to me in my original question. The reason: I think the .gitignore file is taken into account only when adding (i.e. git add .). If I already added files, then put them in the .gitignore file, they would have already been added to the project. I'd need to use the git rm command to remove them. I just started anew with a new .git repo and that solved the problem, but you don't have to - you can just remove whatever files you already added but now want to ignore with the git rm command.

I selected the answer that helped me get to this conclusion as the right one, though the complete solution was just detailed above.

like image 948
Yuval Karmi Avatar asked Aug 14 '10 15:08

Yuval Karmi


2 Answers

What is your deploy strategy?

Do you have Capistrano setup to exclude the .git file? if you are using set :deploy_via, :copy then make sure to add the following:

set :copy_exclude, [".git/*", ".svn/*", ".DS_Store"]

Otherwise use set :deploy_via, :export which should ignore your source control folders

http://www.capify.org/index.php/Understanding_Deployment_Strategies

like image 131
zzawaideh Avatar answered Nov 08 '22 19:11

zzawaideh


Looking at a similar question, it appears you don't need the wild card selectors and can just have:

uploads/

You need to deploy via :git in Capistrano and do an export. It's essentially a git clone and then just deletes the .git directory afterwards.

Your problem isn't much to do with Cap really. Make sure your .gitignore file is working correctly.

like image 1
The Pixel Developer Avatar answered Nov 08 '22 19:11

The Pixel Developer