Non-project files in Xcode git repository - xcode

This is an organizational question for iOS and OSX developers.
When you are using the automatically generated git repository for an Xcode project, how do you add/commit your non-project files such as PSDs or other third-party tool files that are the "source" for the image and audio resources? Do you add them using the git command line, or do you prefer to maintain a separate repo for these files?

I used to use the command line, but now use a GUI, to add them where they make sense in git, for example a "Source Images" folder for psd files, but I do not check in any generated files (i.e. PNG files generated from the PSDs.)
My git GUI app du-jour is Source Tree to add the files.
I also add a custom .gitignore to all of my repos and check it in as well, but that is a different discussion.
I feel that having separate repos makes it easier to make mistakes and lose important changes, since you do not need to cd to a different repo and run the git commands there.

Related

Remove already committed image files from github / Visual Studio git

I have been working on a Net Core project in Visual Studio.
I just realized that all of the image files I have placed in my wwwroot folder have been uploaded to my GitHub repository.
I would like to remove these files from the repository but retain them locally in the VS project.
I have created a .gitignore file and placed it in the wwwroot directory to prevent this from happening again, but am not sure how to remove the files currently uploaded.
I have made several commits since the files were uploaded (but before I realized they were there) so I would prefer not to revert to that point.
I would recommend to use the new git filter-repo which replaces BFG and git filter-branch.
Note: if you get the following error message when running the above-mentioned commands:
Error: need a version of `git` whose `diff-tree` command has the `--combined-all-paths` option`
it means you have to update git.
First: do that one copy of your local repo (a new clone)
See "Path based filtering":
git filter-repo --path file-to-remove --invert-paths
At the end, you can (if you are the only one working on that repository) do a git push --force
Then restore your files locally.
Since your .gitignore is already in place, they won't be added and committed in the future.

Xcode - Hiding .xcodeproj on files on GitHub repo via .gitignore

I am using Xcode to as my IDE for coding questions that I publish and commit to my GitHub account. However, I don't want the ProjectName.xcodeproj to be shown in the repo. Is this possible?
Also, how do you suggest managing .gitignore files in Xcode? The only solution I have come across is managing it manually via terminal.
I've tried creating a .gitignore file via gitignore.io and then going into the project directory via terminal and using curl http://gitignore.io/api/c++,xcode > .gitignore. This has no effect whatsoever.
This has no effect whatsoever.
This would have no effect if the files listed by the .gitignored are already tracked.
Try (now that you have a .gitignore in place) git rm --cached -- ProjectName.xcodeproj, and then see if that file is still in XCode Git status.
Commit and push: that file won't be in the repository anymore.

How to deal with old files in hg repo

I have a project I started with Xcode 3.0. Back then source files were stored in the root directory by default. A long time ago I even did this. Things have evolved, both the project and Xcode and I now have a curious situation:
I have a root folder with the .xcodeproj folder used by Xcode and a ton of old source files I will not use again. More recent versions of Xcode have created a similarly named folder where more recent source files exist.
I'd like to clean up my repository. What should I do with the files I am no longer using? Move them to a separate folder? hg rm? Checkout the repository anew but from a specific revision?
Just do hg rm, files will be moved out of way but kept in the history. That's the very reason why version control exists. Should you ever need them in the future, checkout a past commit and they will be back.

Why doesn't Xcode create a .gitignore file?

I'm aware of how to create one and there are lots of posts of what should be in them for an Xcode project. This is a more basic question.
When creating a new Xcode project with the git option why doesn't Xcode create a default .gitignore file?
Assume that I'm just working locally, I haven't created any remotes.
If I don't add a .gitignore myself does that mean that the files that are usually added to a .gitignore (like .DS_Store and *.xcuserdatad for example) are being managed by git? Is this bad?
Or is Xcode doing something behind the scenes to ignore those files?
I'm pretty sure that Xcode does not create a gitignore file on its own. So this is how I start a new project now.
Create a new project in Xcode. Do not create a local git repo. The problem with getting Xcode to create the repo is that it performs an initial commit before a gitignore file is created. I prefer to add gitignore before the initial commit.
Close the project.
In Terminal, navigate to the directory containing the
new project.
git init
curl https://www.gitignore.io/api/xcode > .gitignore There are lots of places to get gitignore files but this is super handy as shown on NSScreencast episode 156.
git add . Be sure to include the dot, that adds everything.
git commit -m “Initial commit."
Open the project in Xcode and inspect the Source Control menu. If you select History you should see the initial commit.
Update:
www.gitignore.io now redirects to www.toptal.com/developers/gitignore
It's nice. You can specify keywords like xcode, cocoapods, etc.

Convert Xcode project to New Xcode 4 with Git and enable .gitignore?

I'm sort of stumbling around with an issue with Xcode 4, and Git. I'm a one man shop with multiple macs, and had my project working with Git and Xcode4, (stored on a dropbox folder), so I could share that folder across my MBP and iMac with minimal interaction. So, it was late one night and I accidentally committed my xcode project file, and then I started getting issues with UserInterfaceState.xuserstate constantly updating... Later learned that .gitignore would have been good to have in place.
Back to the drawing board and I've been trying to take the new (old) project and enable git on it with the following:
$cd path/to/project
$git init
$git add .
$git commit -m "Initial commit of project"
This works fine, now I'm back in XCODE, and add the repository, which it recognizes in Organizer. One Issue is XCODE doesn't recognize that I've modified a file, and the majority of the "Source Control" menu items are disabled, Ex: "Commit"
I'm wondering if there are a recommended # of steps to:
1) Get Git running on a xcode project that wasn't set up this way initially
2) Steps to add the Gitignore file and when
Ultimately would like the "Source Control" menu items enabled again.
I'm obviously learning some Git SCM related items with xcode 4, and I appreciate your feedback!
Maybe this isn't the answer you want but I gave up on getting Xcode4 to play well with git and just started using the excellent (and free) SourceTree. It really made my life easier.
To add Git to the project
Go to the directory and in a terminal window
cat > .gitignore
build/*
*.pbxuser
*.perspectivev3
*.mode1v3
javascripts/phonegap.*.js
Type Ctrl+D to close the file.
Initialize the Git repository
git init
git add .
git commit -m
Add the repository in organizer. Use the full directory path.
Caveat - this still does not enable Source Control menu items. But you can use git from the command line.
See other related post: Using Git with an existing XCode project
There are three ways of setting up exclude files in git. Which is easiest depends on you. But, I find that when using git to share for myself amongst multiple machines, a global ignore file works best, and I can always add more specific excludes if you need to.
Essentially
Globally, by setting up a per user or per machine exclude file
Per repository - by setting up a .gitignore file in the repo
Per clone - by setting up the `.git/info/excludes file
I've got a my global exclude file on Github if you want to see an example, including Xcode4 specific exclusions.

Resources