Accidentally deleted .git folder in Git's install directory - macos

I forgot to $ cd prior to deleting a .git directory and I happened to be inside Git's main folder, located on my hard drive at /usr/local/git.
I used $ rm -rf .git
I don't have this backed up with Time Machine, but I do have a three-week old clone.
This is not a tracked repository, just the folder that Git itself's files are in.
I figured there's no need for a .git folder in this directory. However, just to be safe, I did a $ sudo git init so the folder would be there if Git was looking for it.
Did I bork anything? Does Git even use this folder? Should I restore from the old clone instead?
Thanks!

Update - On re-reading the question, I realize you are not talking about a repository that you had intentionally created. The question doesn't seem to make sense. If there was .git at /usr/local/git, it might have been created accidentally while cloning or init of some repo etc. But then you say you had a 3 week old clone of it, which doesn't make sense. Anyway, if it is the former case, you need not worry. There shouldn't have been a .git there and git doesn't make use of it.
Does Git even use this folder - this is all that Git uses, because it is your repo. Unless you have clones of your repo elsewhere or have backed up your repo, you have lost your changes. Your 3 week old clone will let you recover some stuff, but any history that you had since then will be lost. Assuming you did not delete your working directory, you can still have your changes, but the history will be lost ( including any branches you had created in the 3 weeks etc.)

Related

Git giving warning: unable to rmdir

I am using git bash on windows 10 which was recently updated to creators update.
whenever i am trying to switch between branches i get following thing
$ git fetch && git checkout master
warning: unable to rmdir Ionic_Developemnt: Directory not empty
Checking out files: 100% (6312/6312), done.
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
I don't know why this is happening also there is a .git hidden folder in the Ionic_Development folder
Can anyone help with this why so error _/_
warning: unable to rmdir on git checkout means that you're switching to a branch where this directory doesn't exist; git tries to remove it but there are some temporary files that git cannot remove; the directory is not empty so git cannot remove it also, hence the warning.
This happens mostly when your files are still in use. I personally experienced this sometimes with atom editor. Try to close your editor, and maybe any running compilers that are watching for changes too, and try to checkout again.
Found the answer, instead of git checkout, use git checkout --recurse-submodules.
Use git config submodule.recurse true to tell git always use --recurse-submodules (only in git versions 2.14+), add --local if you want that only in local project level.
Reason:
This issue happens on (Git < 2.13) when git checkout could not take care of those submodules correctly.
Reference: https://github.com/gitextensions/gitextensions/issues/2966#issuecomment-622666568
Original Answer
Actually I think this answer is partially right :O
If a folder is tracked by local .git within that folder, it would be changed according to .git when you switch branches (e.g. deleted from our point of view, if the other branch does not have this folder).
If a folder is ignored by .gitignore, the folder would be left unchanged when you switch branches.
However, if the folder is a submodule, which is tracked by submodule .git, local .git would try use rmdir when switching branches, which caused the problem.
I know this is old, but in case anyone stumbles on this, as I did, it can also be that you're switching to a different branch and you have a Git submodule. Look for the .git hidden folder in the directory, you can delete it if you don't need it to be a submodule--just be sure to commit the folder to the parent repo in the current branch before switching.
rm -r .git

Cannot PUSH recent commits to Github that have been pushed to Bitbucket

I have two remote repositories. One is private (Bitbucket) and the other public (Github). I had been pushing changes to Bitbucket using Github app and then pushing the same commit to Github repo using Xcode. However, recently I have been unable to PUSH the commits to Github and using SourceTree I get this error message:
This repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting .git/hooks/pre-push.
This is how it looks from within SourceTree:
How can I get my Github repo to accept the most recent commits?
You have a pre-push hook which is telling you that you have git-lfs (large file support) enabled for this repository, but that it can't find the git-lfs program on your computer. The solution is to either remove the hook (which is located in .git/hooks/pre-push, as the error message says), or to fix your PATH so that it can find the git-lfs program.
It would have been enough to say that the .git directory is in the original local directory of your repository and you probably need a program like TextWrangler or similar, that shows the hidden files starting with a dot, to be able to see it and delete it by moving it to the trash (right click mouse). It took me one hour to figure out this. I hope no one else have to waste that time.
Here is the instructions for removing the pre-push file using Mac Terminal:
First: cd to the directory that is your local repository for your project. (The main folder that holds .xcodeproj and other files) The .git file is hidden but you can still access it by typing cd .git/hooks in terminal. If you type ls in terminal to view all files within the current directory, you'll notice the pre-push file. Type rm pre-push to remove the file. You should now be able to push to your remote repository. Just be sure to cd .. back a few times to your local directory for your project. Simple as that.

Undo a git clean command?

I just used a "git clean" command and managed to delete my Documents, Music, and other directories. Is there a way to undo this and somehow get those files back? I did this via Terminal on Mac. Time Machine isn't setup either.
I'm afraid those files are gone. git clean is not reversible since those files were not tracked by git.
From the comments it looks like you had your home folder as git repo, but with nothing tracked.
Running git clean -f removed any file inside the home folder (included the one in the subdirectories), leaving only empty subdirectories (the -d option is required for removing them too).
I'm sorry to inform you that you definitely wiped out your whole home directory. Next time you run a git clean use the -n options to perform a dry run and check what's going to happen before it's too late.
Unfortunately git clean removes all the untracked files, meaning the files that are deleted are not able to be recovered using git. You might be able to check your trash to see if the files still exist there.

How to restore version control in XCode?

I have just recently backed-up my XCode C++ project on my pendrive, using
rsync -avu
Since then, the version control for my project is grayed-out on every files, I can modify the files and not see the "M" nor the "A" sign. The only files still having version-control working "shared" files for which it works correctly. (Those shared files belong to a different project called "Shared").
I have tried git commit -m, git add . and even git init where the files were. Nothing worked.
Can you please help restoring version control for my project?
UPDATE:
Answers for the questions in commens (and answers):
my git repository is on my local hard drive.
I went to the Organiser-repository pane in XCode and I see my recent git commit -m "sth" as "sth" az a commit. I have a single branch: master.
Im not sure what command would be good to test git, as my commits work (theoretically).
I have a folder named .git in the project folder.
git log is working, showing the same as XCode Organiser-repository pane.
I think the XCode just can't synchronise with the git for some reason, and I don't know how to correct that.
First off, this is not an answer that will fix your problem, I just try to provide some help that might get you closer to a diagnosis.
Git stores its files in a folder named .git. Check if this folder is present in your project. If it's not then your Git repository is gone.
Next, try some basic command such as git log. For this to work, you must first cd to your project folder (or a subfolder thereof), because whenever you run a Git command it will look for the .git folder in the cwd or a parent folder. If git log does not work then your Git repository is broken in some way. Someone else will have to step in to further diagnose the problem, as I am no expert on this subject.
Finally, you should also check whether your rsync command has really sync'ed your project's .git folder with the backup's .git folder. Use this command:
diff -rq /path/to/project/.git /path/to/backup/.git
If there is no difference (as I would expect if rsync has worked correctly) then the problem with your Git repository is both in your project and in your backup. If there are differences then it might be worthwile to try your next steps on a copy of the backup (it should be fine to make the copy in the Finder).
Good luck.

Using Xcode 4, can I get rid of a git repository but keep my whole project in its current state?

I started using a git repository in Xcode 4 without previously knowing git and it looks like I've messed up the state of the repository. I first made a repository, made many commits on it, then made a branch and made many commits on the branch. Then I tried to merge the branch back to the master branch using the Xcode organizer but it won't let me switch to the master branch. When I try to switch to the master branch I get the error: "you need to resolve your current index first". I don't know what that means exactly. I did a commit and everything is up-to-date. I don't see anything in Xcode menus or screens that mentions "index". After reading some postings about git and playing with the git command line I'm clearly lost and have no clue what to do.
I know the right thing to do is learn git and learn how to use the command line tool, but I don't want to take the time for that now. I don't really need the repository functions anyway, I was only using them to see what they were like. I could keep copies of the whole directory and/or I could use snapshots to give me a way to go back to an earlier state.
The current state of the code on the branch I've been working on is fine, so what I'd like to do it un-git it. IOW eliminate the repository altogether but keep the project in its current state. Is there a way to do that? I don't need to go back to the project state on the master branch, I only need the current state.
The quick way to un-git a project is open Terminal, go to the project directory, and remove the .git directory
cd ~/Documents/MyProject/
rm -rf .git
Be careful with the rm command, you only want to nuke the .git directory. Not your code.
I don't know how to make the .git directory visible in finder.
To remove all traces of git delete the .git folder in your main project folder. Also look for any .git* files (eg. .gitignore, .gitmodules). If you have submodules you will need to check your subfolders for these files and the .git directory as well.
On linux, this will do it:
find /base/dir -name '.git*' -prune -exec rm -rf {} \;

Resources