What is "Pod/***.a Pod/**.dia" file? - swift

I am using the Cocoapod , RxCocoa , RxSwift and Git.
When I run the "git status", some warning will show:
(use "git restore ..." to discard changes in working directory)
modified: Pods/RxCocoa.d
modified: Pods/RxRelay.d
modified: Pods/RxSwift.d
I remember "Pod/*.a Pod/.dia" show too.
How to prevent this in the future?
Must I add something into the .gitignore file??
=====================
Edit again:
I viewed the .gitignore a few minutes ago.
My project doesn't ignore the Pods.
My project ignore the files in this way:
# Xcode
*.build
*.dia
*.tlog
*.o
*.d
In my opinion, I need't ignore the ".d" ".a" ".dia" files which are in the file "Pods/", need I?

You could ignore Pods altogether:
echo Pods/>.gitignore
git rm --cached -R Pods/
But ignoring Pods has its Pros and Cons, so make sure this would work with your development workflow.
If your .gitignore already had *.d for instance, you can make sure that rule applies with:
git rm --cached -R Pods/*.d
(same for *.a, and so on)

Related

How can I ignore any changes in a particular folder from Git

I want to exclude the changes in all files in a folder Api\Bin*.* and Core\obj*.* into GitHub merging. I dont want to consider that folder while merging the changes. How can I do that Please advise. I have added the following line of code in ignored file from Repository->Setting->Ignored files , but not working . When compile the program , still obj and bin folder files is showed in changes of GitHub
You can add a line in gitingore files following ways
logs/
These lines will ignore the logs folder. Even you can use patterns.
If those files are already tracked, no amount of .gitignore would work.
You need to remove them first (from the Git index, not from your disk)
git rm --cached -r API/bin/
git rm --cached -r Core/obj/
Then check (no commit needed) if you see them in GitHub Desktop.
You can also see if your .gitignore rules apply with:
git check-ignore -v -- Core/obj/<anObjFile>

.gitignore_global has no effect on .idea/ created by JetBrains

I am trying to get Git to ignore .idea/ created by JetBrains' product but somehow it works on every folder I created except the .idea/ created by JetBrains. Why ?
So how do I globally ignore .idea/ ?
I already had my core.excludesfile set to ~/.gitignore_global
Make sure first that folder was not already tracked:
cd /path/to/repo
git rm -r --cached .idea/
Then check your git status: add, commit (register the deletion): the .gitignore should now be in effect for that folder.
To check that the folder ignore rule is in effect:
git check-ignore -v -- .idea/a_file_inside_.idea_folder
As long as it returns nothing, that file (inside the .idea folder) is not ignored.
That git check-ignore command will consider all ignore files possible, including the core.excludesfile one (in your case set to ~/.gitignore_global)

Git ignore not ignoring directories

I'm trying to ignore obj, bin, debug type files/directories from my Visual studio project. I've followed the advice here:
ignoring any 'bin' directory on a git project
This is not working.
I've pasted the entire git ignore here:
https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
This is not working.
I've tried all sorts of things...
bin/
obj/
*bin/
*obj/
/bin/
/obj/
packages
MyProject/MyProject/obj/
MyProject/MyProject/bin/Debug/
MyProject/MyProject/obj/*
MyProject/MyProject/bin/Debug/*
The directories and their files are still being included when I run a git add. The .gitignore file is added and commited. What am I doing wrong???
EDIT: The files I'm trying to ignore aren't already being tracked. When I run a "git status" there are no pending changes. "nothing to commit, working tree clean". Then I run my VS program which modifies the files in those folders. Then I run another git status and all of the files show up as "modified"...
EDIT2: Does it matter if the files already exist? They are not being tracked but DO exist in the folder structure. When when I run the program they show up again as "modified". Then I have to run a "git checkout ." to remove them all. Then the cycle repeats...
If your file was already been tracked and committed before adding in .gitignore, it won't ignore it. You would require to remove it from index to stop tracking
For file
git rm --cached <file need to remove>
For Folders
git rm -r --cached <folder>
So that would be an issue in your case since Jenkins is still able to see the file in the repo
Hi look at the edit part ,
If you already have any folders in your git index which you no longer wish to track then you need to remove them explicitly. Git won't stop tracking paths that are already being tracked just because they now match a new .gitignore pattern. Execute a folder remove (rm) from index only (--cached) recursivelly (-r).
git rm -r --cached yourfolder
Based on your "Edit 2" above, it sounds like you don't think these have been previously committed, but in reality, they have been. If it shows up as "modified", the git is recognizing the file has changed from the last version it has checked in. If the file was not already committed previously then it would show up as Untracked.
When you are running git checkout on those files, you are telling git to revert those files back to the last version that was checked into git.

Cocoapods gitignore not working in swift3 xcode project [duplicate]

This question already has answers here:
How do I make Git forget about a file that was tracked, but is now in .gitignore?
(33 answers)
Closed 5 years ago.
I have an already initialized Git repository that I added a .gitignore file to. How can I refresh the file index so the files I want ignored get ignored?
To untrack a single file that has already been added/initialized to your repository, i.e., stop tracking the file but not delete it from your system use: git rm --cached filename
To untrack every file that is now in your .gitignore:
First commit any outstanding code changes, and then, run this command:
git rm -r --cached .
This removes any changed files from the index(staging area), then just run:
git add .
Commit it:
git commit -m ".gitignore is now working"
To undo git rm --cached filename, use git add filename.
Make sure to commit all your important changes before running git add .
Otherwise, you will lose any changes to other files.
Please be careful, when you push this to a repository and pull from somewhere else into a state where those files are still tracked, the files will be DELETED
If you are trying to ignore changes to a file that's already tracked in the repository (e.g. a dev.properties file that you would need to change for your local environment but you would never want to check in these changes) than what you want to do is:
git update-index --assume-unchanged <file>
If you wanna start tracking changes again
git update-index --no-assume-unchanged <file>
See git-update-index(1) Manual Page.
Also have a look at the skip-worktree and no-skip-worktree options for update-index if you need this to persist past a git-reset (via)
Update:
Since people have been asking, here's a convenient (and updated since commented on below) alias for seeing which files are currently "ignored" (--assume-unchanged) in your local workspace
$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
To untrack a file that has already been added/initialized to your repository, ie stop tracking the file but not delete it from your system use: git rm --cached filename
Yes - .gitignore system only ignores files not currently under version control from git.
I.e. if you've already added a file called test.txt using git-add, then adding test.txt to .gitignore will still cause changes to test.txt to be tracked.
You would have to git rm test.txt first and commit that change. Only then will changes to test.txt be ignored.
Remove trailing whitespace in .gitignore
Also, make sure you have no trailing whitespace in your .gitignore. I got to this question because I was searching for an answer, then I had a funny feeling I should open the editor instead of just cat'ing .gitignore. Removed a single extra space from the end and poof it works now :)
i followed these steps
git rm -r --cached .
git add .
git reset HEAD
after that, git delete all files (*.swp in my case) that should be ignoring.
Complex answers everywhere!
Just use the following
git rm -r --cached .
It will remove the files you are trying to ignore from the origin and not from the master on your computer!
After that just commit and push!
If you want to stop tracking file without deleting the file from your local system, which I prefer for ignoring config/database.yml file. Simply try:
git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.
now, add this file to .gitignore file and commit the changes. And from now on, any changes made to config/database.yml will not get tracked by git.
$ echo config/database.yml >> .gitignore
Thanks
To remove just a few specific files from being tracked:
git update-index --assume-unchanged path/to/file
If ever you want to start tracking it again:
git update-index --no-assume-unchanged path/to/file
As dav_i says, in order to keep the file in repo and yet removing it from changes without creating an extra commit you can use:
git update-index --assume-unchanged filename
None of the answers worked for me.
Instead:
Move the file out of the git-controlled directory
Check the removal into git
Move the file back into the git-controlled directory
After moving the file back, git will ignore it.
Works with directories too!
Not knowing quite what the 'answer' command did, I ran it, much to my dismay. It recursively removes every file from your git repo.
Stackoverflow to the rescue... How to revert a "git rm -r ."?
git reset HEAD
Did the trick, since I had uncommitted local files that I didn't want to overwrite.
There is another suggestion maybe for the slow guys like me =) Put the .gitignore file into your repository root not in .git folder. Cheers!
If the files are already in version control you need to remove them manually.
another problem I had was I placed an inline comment.
tmp/* # ignore my tmp folder (this doesn't work)
this works
# ignore my tmp folder
tmp/
Thanks to your answer, I was able to write this little one-liner to improve it. I ran it on my .gitignore and repo, and had no issues, but if anybody sees any glaring problems, please comment. This should git rm -r --cached from .gitignore:
cat $(git rev-parse --show-toplevel)/.gitIgnore | sed "s/\/$//" | grep -v "^#" | xargs -L 1 -I {} find $(git rev-parse --show-toplevel) -name "{}" | xargs -L 1 git rm -r --cached
Note that you'll get a lot of fatal: pathspec '<pathspec>' did not match any files. That's just for the files which haven't been modified.
I have found a weird problem with .gitignore. Everything was in place and seemed correct. The only reason why my .gitignore was "ignored" was, that the line-ending was in Mac-Format (\r). So after saving the file with the correct line-ending (in vi using :set ff=unix) everything worked like a charm!
One other problem not mentioned here is if you've created your .gitignore in Windows notepad it can look like gibberish on other platforms as I found out. The key is to make sure you the encoding is set to ANSI in notepad, (or make the file on linux as I did).
From my answer here: https://stackoverflow.com/a/11451916/406592
If you need to stop tracking a lot of ignored files, you can combine some commands:
git ls-files -i --exclude-standard | xargs -L1 git rm --cached
This would stop tracking the ignored files. If you want to actually remove files from filesystem, do not use the --cached option. You can also specify a folder to limit the search, such as:
git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm
On my server linux server (not true on my local dev mac), directories are ignored as long as I don't add an asterisk:
www/archives/*
I don't know why but it made me loose a couple of hours, so I wanted to share...
One thing to also keep in mind if .gitignore does not seem to be ignoring untracked files is that you should not have comments on the same line as the ignores. So this is okay
# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*
But this will not work:
foo* # ignore all foo.txt, foo.markdown, foo.dat, etc.
.gitignore interprets the latter case as "ignore files named "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc.", which, of course, you don't have.

Why is git still trying to add the classpath files?

I am working on a windows computer with cygwin using git with eclipse...
git keeps trying to add the following files
modified: EJB/.classpath
modified: WAR/.classpath
but if you look in my .gitignore it looks like this..
Flex/src/generated/
work/
logs/
build/
EJB/classes/
WAR/WebRoot/WEB-INF/classes/
.classpath
EJB/.classpath
com.genuitec.eclipse.persistence.jpa.prefs
WAR/.classpath
WAR/.classpath
EJB/.classpath
what else can I do or try?
I think you have added those .classpath files to git earlier, and git is already tracking them, so adding them to .gitignore is not sufficient.
You need to stop tracking it in your repo. Try
git rm -r --cached EJB/.classpath WAR/.classpath
git commit -m "untracking .classpath files"
And after this, gitignore will ignore the changes to them.